library/GSM_RestOctets: add partial definition of SI 6 Rest Octets

Change-Id: I5aeed4986820a71f761f21b57c87782d3000293f
diff --git a/library/GSM_RestOctets.ttcn b/library/GSM_RestOctets.ttcn
index 9aa1217..94dce04 100644
--- a/library/GSM_RestOctets.ttcn
+++ b/library/GSM_RestOctets.ttcn
@@ -693,6 +693,55 @@
 	variant "PADDING(yes), PADDING_PATTERN('00101011'B)"
 };
 
+/* 10.5.2.35a SI 6 Rest Octets */
+type record SI6RestOctets {
+	PchAndNchInfoOpt	pch_nch_info,
+	VbsVgcsOptionsOpt	vbs_vgcs_options,
+	BIT1			dtm_support, // L/H
+	uint8_t			rac optional,
+	uint3_t			max_lapdm optional,
+	BIT1			band_ind // L/H (DCS/PCS)
+	/* TODO: add more fields */
+} with {
+	variant (dtm_support) "CSN.1 L/H"
+	variant (rac) "PRESENCE(dtm_support = '1'B)"
+	variant (max_lapdm) "PRESENCE(dtm_support = '1'B)"
+	variant (band_ind) "CSN.1 L/H"
+
+	/* 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)"
+};
+
+/* Optional PCH and NCH info: L | H < PCH and NCH info > */
+type record PchAndNchInfoOpt {
+	BIT1			presence, // L/H
+	PchAndNchInfo		info optional
+} with {
+	variant (presence) "CSN.1 L/H"
+	variant (info) "PRESENCE(presence = '1'B)"
+};
+
+/* PCH and NCH info */
+type record PchAndNchInfo {
+	BIT1			pag_chan_restruct,
+	uint2_t			nln_sacch,
+	BIT1			call_prio_presence,
+	uint3_t			call_prio optional,
+	BIT1			nln_status_sacch
+} with {
+	variant (call_prio) "PRESENCE(call_prio_presence = '1'B)"
+};
+
+/* Optional VBS/VGCS options: L | H < VBS/VGCS options > */
+type record VbsVgcsOptionsOpt {
+	BIT1			presence, // L/H
+	BIT2			options optional
+} with {
+	variant (presence) "CSN.1 L/H"
+	variant (options) "PRESENCE(presence = '1'B)"
+};
+
 /* 10.5.2.37b SI 13 Rest Octets (O & S) */
 type record SI13RestOctets {
 	BIT1			presence, // L/H
@@ -806,6 +855,11 @@
 external function dec_SI4RestOctets(in octetstring stream) return SI4RestOctets
 	with { extension "prototype(convert) decode(RAW)" };
 
+external function enc_SI6RestOctets(in SI4RestOctets ro) return octetstring
+	with { extension "prototype(convert) encode(RAW)" };
+external function dec_SI6RestOctets(in octetstring stream) return SI6RestOctets
+	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