bts: Extend LAPDm test suite with a number of new tests

This adds the following test cases to BTS_Tests_LAPDm.ttcn:
* TC_sabm_retransmit_bts()
* TC_sabm_invalid_resp()
* TC_sabm_dm()
* TC_establish_ign_first_sabm()
* TC_iframe_seq_and_ack()
* TC_iframe_timer_recovery()

Change-Id: I4e1136c0c0f10d5bc8d01e826ae5d92f17a0b2aa
diff --git a/library/LAPDm_Types.ttcn b/library/LAPDm_Types.ttcn
index a1ca5fe..577c9bd 100644
--- a/library/LAPDm_Types.ttcn
+++ b/library/LAPDm_Types.ttcn
@@ -105,7 +105,7 @@
 		s := { n_r := nr, p_f := pf, s := '00'B }
 	};
 	template (value) LapdmCtrl ts_LapdmCtrlRR(uint3_t nr, boolean pf) := {
-		s := { n_r := nr, p_f := pf, s := '00'B }
+		s := { n_r := nr, p_f := pf, s := '00'B, spare := '01'B }
 	};
 
 	template LapdmCtrl tr_LapdmCtrlRNR(template uint3_t nr, template boolean pf) modifies tr_LapdmCtrlS := {
@@ -115,6 +115,10 @@
 	template LapdmCtrl tr_LapdmCtrlREJ(template uint3_t nr, template boolean pf) modifies tr_LapdmCtrlS := {
 		s := { n_r := nr, p_f := pf, s := '10'B }
 	};
+	template (value) LapdmCtrl ts_LapdmCtrlREJ(uint3_t nr, boolean pf)  := {
+		s := { n_r := nr, p_f := pf, s := '10'B, spare := '01'B }
+	};
+
 
 	template LapdmCtrl tr_LapdmCtrlSABM(template boolean p) := {
 		u := { u := '001'B, p_f := p, u2 := '11'B, spare := '11'B }
@@ -126,6 +130,9 @@
 	template LapdmCtrl tr_LapdmCtrlDM(template boolean f) := {
 		u := { u := '000'B, p_f := f, u2 := '11'B, spare := '11'B }
 	};
+	template (value) LapdmCtrl ts_LapdmCtrlDM(boolean f) := {
+		u := { u := '000'B, p_f := f, u2 := '11'B, spare := '11'B }
+	};
 
 	template LapdmCtrl tr_LapdmCtrlUI(template boolean p := false) := {
 		u := { u := '000'B, p_f := p, u2 := '00'B, spare := '11'B }
@@ -261,6 +268,28 @@
 		}
 	}
 
+	template (value) LapdmFrame ts_LAPDm_DM(LapdmSapi sapi, boolean c_r, boolean f) := {
+		ab := {
+			addr := ts_LapdmAddr(sapi, c_r),
+			ctrl := ts_LapdmCtrlDM(f),
+			len := 0, /* overwritten in encoder */
+			m := false,
+			el := 1,
+			payload := ''O
+		}
+	}
+	template LapdmFrame tr_LAPDm_DM(template LapdmSapi sapi, template boolean c_r,
+					template boolean f) := {
+		ab := {
+			addr := tr_LapdmAddr(sapi, c_r),
+			ctrl := tr_LapdmCtrlDM(f),
+			len := ?,
+			m := false,
+			el := 1,
+			payload := ''O
+		}
+	}
+
 	template LapdmFrame ts_LAPDm_DISC(LapdmSapi sapi, boolean c_r, boolean p) := {
 		ab := {
 			addr := ts_LapdmAddr(sapi, c_r),
@@ -368,6 +397,29 @@
 		}
 	}
 
+	template LapdmFrame tr_LAPDm_REJ(template LapdmSapi sapi, template boolean c_r,
+					 template boolean p, template uint3_t nr) := {
+		ab := {
+			addr := tr_LapdmAddr(sapi, c_r),
+			ctrl := tr_LapdmCtrlREJ(nr, p),
+			len := 0,
+			m := false,
+			el := 1,
+			payload := ''O
+		}
+	}
+	template (value) LapdmFrame ts_LAPDm_REJ(LapdmSapi sapi, boolean c_r,
+						 boolean p, uint3_t nr) := {
+		ab := {
+			addr := ts_LapdmAddr(sapi, c_r),
+			ctrl := ts_LapdmCtrlREJ(nr, p),
+			len := 0,
+			m := false,
+			el := 1,
+			payload := ''O
+		}
+	}
+
 
 
 } with { encode "RAW"; /*variant "FIELDORDER(msb)" */}