Add LAPDm test case about SABM contention
diff --git a/lapd/L1CTL_Test.ttcn b/lapd/L1CTL_Test.ttcn
index acd19cc..e780de8 100644
--- a/lapd/L1CTL_Test.ttcn
+++ b/lapd/L1CTL_Test.ttcn
@@ -44,7 +44,7 @@
 		lapdm := frame
 	}
 	/* template for a valid SABM frame */
-	template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, template octetstring payload)  := {
+	template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, octetstring payload)  := {
 		b := {
 			addr := tr_LapdmAddr(sapi, false),
 			ctrl := t_LapdmCtrlSABM(true),
@@ -56,7 +56,19 @@
 	}
 
 	/* template for a valid UA frame */
-	template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, template octetstring payload)  := {
+	template LapdmFrame tr_LAPDm_B_UA(template GsmSapi sapi, template octetstring payload)  := {
+		b := {
+			addr := tr_LapdmAddr(sapi, false),
+			ctrl := t_LapdmCtrlUA(true),
+			len := ?,
+			m := false,
+			el := 1,
+			payload := payload
+		}
+	}
+
+	/* template for a valid UA frame */
+	template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, octetstring payload)  := {
 		b := {
 			addr := tr_LapdmAddr(sapi, false),
 			ctrl := t_LapdmCtrlUA(true),
@@ -68,7 +80,7 @@
 	}
 
 	/* template for a valid UI frame */
-	template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, template octetstring payload)  := {
+	template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, octetstring payload)  := {
 		b := {
 			addr := tr_LapdmAddr(sapi, true),
 			ctrl := t_LapdmCtrlUI(false),
@@ -130,6 +142,33 @@
 		setverdict(pass);
 	}
 
+	testcase TC_sabm_contention() runs on dummy_CT {
+		var LAPDm_ph_data phd;
+		const octetstring payload := '0102030405'O;
+		const GsmSapi sapi := 0;
+		const boolean use_sacch := false;
+		timer T := 5.0;
+
+		f_init();
+
+		f_establish_dcch();
+		/* first frame is our real SABM */
+		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
+		/* second frame is a SABM with different payload, which BTS has to ignore according to 8.4.1.4 */
+		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, 'ABCDEF'O)));
+		log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
+		T.start
+		alt {
+			[] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { setverdict(pass); repeat; }
+			[] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_B_UA(sapi, ?))) {
+				setverdict(fail, "Second SABM was responded to during contention resolution");
+			}
+			[] LAPDM.receive { repeat };
+			[] T.timeout { }
+		}
+		f_release_dcch();
+	}
+
 
 	testcase TC_foo() runs on dummy_CT {
 /*
@@ -155,10 +194,9 @@
 	control {
 		execute(TC_foo());
 		execute(TC_sabm_ua_dcch_sapi0());
-/*
 		execute(TC_sabm_ua_dcch_sapi0_nopayload());
 		execute(TC_sabm_ua_dcch_sapi3());
 		execute(TC_sabm_ua_dcch_sapi4());
-*/
+		execute(TC_sabm_contention());
 	}
 }