Introduce NS test cases

Related: SYS#5208
Change-Id: Ic619a374b88879d3116f8f28afb14401c3e3192b
diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 9e4d702..2bbc508 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -16,6 +16,14 @@
 
 	template (present) BssgpBvci t_BssgpBvciUser := complement (0);
 
+	type enumerated OsmoNsDialect {
+		NS2_DIALECT_UNDEF		('00'H),
+		NS2_DIALECT_STATIC_ALIVE	('01'H),
+		NS2_DIALECT_STATIC_RESETBLOCK	('02'H),
+		NS2_DIALECT_IPACCESS		('03'H),
+		NS2_DIALECT_SNS			('04'H)
+	};
+
 	/* TS 48.016 10.3.7 */
 	type enumerated NsPduType {
 		NS_PDUT_NS_UNITDATA	('00000000'B),
diff --git a/library/RAW_NS.ttcnpp b/library/RAW_NS.ttcnpp
index c8fc518..81836c7 100644
--- a/library/RAW_NS.ttcnpp
+++ b/library/RAW_NS.ttcnpp
@@ -257,4 +257,13 @@
 		}
 }
 
+/* Receive a NS-BLOCK and ACK it */
+public altstep as_rx_ns_block_ack(boolean oneshot := false, integer idx := 0, template NsCause cause := *, template Nsvci nsvci := *) runs on RAW_NS_CT {
+	var PDU_NS ns_rf;
+	[] NSCP[idx].receive(tr_NS_BLOCK(cause, nsvci)) -> value ns_rf {
+		NSCP[idx].send(ts_NS_BLOCK_ACK(oct2int(ns_rf.pDU_NS_Block.nS_VCI.nS_VCI)));
+		if (not oneshot) { repeat; }
+		}
+}
+
 }