bts: Type Definition + Template for SI3; Send SI3 at start of test

The BTS needs some of the SI3 parameters like BS_AG_BLKS_RES for
internal computations, so make sure we send it after the connection
has been established.

Change-Id: I5dc3724f79e669f52593cd776806d84b4dd4bf5c
diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn
index 4d1efd7..a8b6db2 100644
--- a/library/GSM_RR_Types.ttcn
+++ b/library/GSM_RR_Types.ttcn
@@ -366,6 +366,68 @@
 		uint3_t		non_drx_timer
 	} with { variant "" };
 
+	/* 44.018 10.5.2.3 */
+	type enumerated CellOptions_DTX {
+		MS_MAY_USE_UL_DTX	('00'B),
+		MS_SHALL_USE_UL_DTX	('01'B),
+		MS_SHALL_NOT_USE_UL_DTX	('10'B)
+	} with { variant "FIELDLENGTH(2)" };
+	type record CellOptions {
+		boolean		dn_ind,
+		boolean		pwrc,
+		CellOptions_DTX	dtx,
+		uint4_t		radio_link_tout_div4
+	} with { variant "" };
+
+	/* 44.018 10.5.2.4 */
+	type record CellSelectionPars {
+		uint3_t		cell_resel_hyst_2dB,
+		uint5_t		ms_txpwr_max_cch,
+		BIT1		acs,
+		boolean		neci,
+		uint6_t		rxlev_access_min
+	} with { variant "" };
+
+	/* 44.018 10.5.2.29 */
+	type enumerated RachCtrlPar_MR {
+		RACH_MAX_RETRANS_1	('00'B),
+		RACH_MAX_RETRANS_2	('01'B),
+		RACH_MAX_RETRANS_4	('10'B),
+		RACH_MAX_RETRANS_7	('11'B)
+	} with { variant "FIELDLENGTH(2)" };
+	type record RachControlPars {
+		RachCtrlPar_MR	max_retrans,
+		BIT4		tx_integer,
+		boolean		cell_bar_access,
+		boolean		re_not_allowed,
+		BIT16		acc
+	} with { variant "" };
+
+	/* 44.018 10.5.2.11 */
+	type enumerated CtrlChanDesc_CC {
+		CCHAN_DESC_1CCCH_NOT_COMBINED	('000'B),
+		CCHAN_DESC_1CCCH_COMBINED	('001'B),
+		CCHAN_DESC_2CCCH_NOT_COMBINED	('010'B),
+		CCHAN_DESC_3CCCH_NOT_COMBINED	('100'B),
+		CCHAN_DESC_4CCCH_NOT_COMBINED	('110'B)
+	} with { variant "FIELDLENGTH(3)" };
+	type enumerated CBQ3 {
+		CBQ3_IU_MODE_NOT_SUPPORTED	('00'B),
+		CBQ3_IU_MODE_MS_BARRED		('01'B),
+		CBQ3_IU_MODE_NOT_BARRED		('10'B)
+	} with { variant "FIELDLENGTH(2)" };
+	type record CtrlChanDesc {
+		boolean		msc_r99,
+		boolean		att,
+		uint3_t		bs_ag_blks_res,
+		CtrlChanDesc_CC	ccch_conf,
+		boolean		si22_ind,
+		CBQ3		cbq3,
+		BIT2		spare,
+		uint3_t		bs_pa_mfrms, /* off by 2 */
+		uint8_t		t3212
+	} with { variant "" };
+
 	/* 24.008 10.5.5.15 */
 	type record RoutingAreaIdentification {
 		LocationAreaIdentification	lai,
@@ -577,6 +639,16 @@
 		RestOctets			rest_octets
 	} with { variant "" };
 
+	/* 9.1.35 */
+	type record SystemInformationType3 {
+		CellIdentity			cell_id,
+		LocationAreaIdentification	lai,
+		CtrlChanDesc			ctrl_chan_desc,
+		CellOptions			cell_opts,
+		CellSelectionPars		cell_sel_pars,
+		RachControlPars			rach_ctrl_pars,
+		RestOctets			rest_octets
+	} with { variant (rest_octets) "FIELDLENGTH(4)" };
 
 	type union RrUnion {
 /*
@@ -584,13 +656,13 @@
 		SystemInformationType2		si2,
 		SystemInformationType2bis	si2bis,
 		SystemInformationType2ter	si2ter,
-		SystemInformationType3		si3,
 		SystemInformationType4		si4,
 		SystemInformationType5		si5,
 		SystemInformationType5bis	si5bis,
 		SystemInformationType5ter	si5ter,
 		SystemInformationType6		si6,
 */
+		SystemInformationType3		si3,
 		ImmediateAssignment		imm_ass,
 		ImmediateAssignmentReject	imm_ass_rej,
 		PagingRequestType1		pag_req_1,
diff --git a/library/General_Types.ttcn b/library/General_Types.ttcn
index b404fe1..83b2a42 100644
--- a/library/General_Types.ttcn
+++ b/library/General_Types.ttcn
@@ -75,6 +75,7 @@
   type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
   type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
   type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
+  type bitstring BIT32 length(32) with { variant "FIELDLENGTH(32)" };
   type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
 
   //****************************************************
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index d3e021d..a614122 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -2093,6 +2093,8 @@
 	return f_concat_pad(12, '49123'H, suffix);
 }
 
+external function enc_MobileIdentityLV(in MobileIdentityLV si) return octetstring
+	with { extension "prototype(convert) encode(RAW)" };
 
 
 }