stp: Add tests for setups with multiple "routing context 0" ASPs

These two test cases verify that
* libosmo-sigtran doesn't include a routing context IE even in ASP
  role when using a ASP with a single routing context 0 configured
* osmo-stp can route between a single SG-role ASP with routing context
  to two ASP-role ASPs which both have routing context 0 (i.e. no
  routing context IE in use)

The tests do not pass with current libosmo-sigtran until OS#6003 is
fixed, presumably by Change-Id I5ce89b393a3b950ab7fd1eace9038718c9efcc51

Change-Id: I81052ece7d1cc8b43da6155356ed1c4d9620acdc
Related: OS#6003
diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn
index 41b2e2c..5af894a 100644
--- a/stp/STP_Tests_M3UA.ttcn
+++ b/stp/STP_Tests_M3UA.ttcn
@@ -35,7 +35,7 @@
 import from STP_Tests_Common all;
 
 private const integer NR_M3UA := 3;	/* number of M3UA clients in ATS */
-private const integer NR_M3UA_SRV := 1;	/* number of M3UA servres in ATS */
+private const integer NR_M3UA_SRV := 3;	/* number of M3UA servres in ATS */
 
 modulepar {
 	/* STP-side IP addresses */
@@ -68,6 +68,20 @@
 			local_sctp_port := 10002,
 			point_code := 55,
 			routing_ctx := 1055
+		},
+		/* as-client60-norctx */
+		{
+			remote_sctp_port := 2907,
+			local_sctp_port := 11060,
+			point_code := 60,
+			routing_ctx := -
+		},
+		/* as-client61-norctx */
+		{
+			remote_sctp_port := 2907,
+			local_sctp_port := 11061,
+			point_code := 61,
+			routing_ctx := -
 		}
 	};
 	integer mp_recovery_timeout_msec := 2000;
@@ -793,6 +807,60 @@
 	f_clear_m3ua();
 }
 
+/* Test traffic being routed through "server" side STP (M3UA SG), coming back in "client"
+ * side STP (M3UA ASP) which has no routing context set */
+testcase TC_clnt_sg_to_asp_norctx() runs on RAW_M3UA_CT {
+	var OCT4 rctx_sender := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
+	var OCT4 pc_sender := int2oct(mp_m3ua_configs[0].point_code, 4);
+	var OCT4 pc_receiver := int2oct(mp_m3ua_configs[M3UA_SRV(1)].point_code, 4);
+	var OCT4 pc_receiver2 := int2oct(mp_m3ua_configs[M3UA_SRV(2)].point_code, 4);
+
+	/* activate the sender side (ATS is client to STP in SG role) */
+	f_init_m3ua();
+	f_M3UA_asp_up_act(0);
+
+	/* activate the receiver side (ATS is server to STP in ASP role) */
+	f_init_m3ua_srv();
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(1), rctx := omit);
+	/* activate another instance of STP in ASP role with no routing context */
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(2), rctx := omit);
+
+	f_sleep(1.0);
+
+	/* verify traffic is routed from sender to [sole] receiver for each PC */
+	f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(1), omit, pc_receiver);
+	f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(2), omit, pc_receiver2);
+
+	f_clear_m3ua();
+}
+
+/* Test traffic being routed through "server" side STP (M3UA SG), coming back in "client"
+ * side STP (M3UA ASP) which has no routing context set */
+testcase TC_clnt_asp_to_sg_norctx() runs on RAW_M3UA_CT {
+	var OCT4 rctx_receiver := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
+	var OCT4 pc_receiver := int2oct(mp_m3ua_configs[0].point_code, 4);
+	var OCT4 pc_sender := int2oct(mp_m3ua_configs[M3UA_SRV(1)].point_code, 4);
+	var OCT4 pc_sender2 := int2oct(mp_m3ua_configs[M3UA_SRV(2)].point_code, 4);
+
+	/* activate the sender side (ATS is client to STP in SG role) */
+	f_init_m3ua();
+	f_M3UA_asp_up_act(0);
+
+	/* activate the receiver side (ATS is server to STP in ASP role) */
+	f_init_m3ua_srv();
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(1), rctx := omit);
+	/* activate another instance of STP in ASP role with no routing context */
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(2), rctx := omit);
+
+	f_sleep(1.0);
+
+	/* verify traffic is routed from sender to [sole] receiver for each PC */
+	f_test_traffic(M3UA_SRV(1), omit, pc_sender, 0, rctx_receiver, pc_receiver);
+	f_test_traffic(M3UA_SRV(2), omit, pc_sender2, 0, rctx_receiver, pc_receiver);
+
+	f_clear_m3ua();
+}
+
 /* Test if ASPAC / ASPIA of one ASP generates DAVA / DUNA on other ASP */
 testcase TC_ssnm_aspac_dava_aspia_duna() runs on RAW_M3UA_CT {
 	var OCT4 rctx0 := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
@@ -1050,6 +1118,9 @@
 	execute( TC_clnt_sg_to_asp() );
 	execute( TC_clnt_asp_to_sg() );
 
+	execute( TC_clnt_sg_to_asp_norctx() );
+	execute( TC_clnt_asp_to_sg_norctx() );
+
 	execute( TC_clnt_quirk_no_notify_asp_act() );
 	execute( TC_clnt_no_daud_in_asp() );
 	execute( TC_clnt_quirk_daud_in_asp() );
diff --git a/stp/osmo-stp.cfg b/stp/osmo-stp.cfg
index 50c80d3..427eb34 100644
--- a/stp/osmo-stp.cfg
+++ b/stp/osmo-stp.cfg
@@ -53,6 +53,16 @@
   remote-ip 127.0.0.1
   sctp-role client
   role asp
+ asp asp-client60-norctx0 11060 2907 m3ua
+  local-ip 127.0.0.1
+  remote-ip 127.0.0.1
+  sctp-role client
+  role asp
+ asp asp-client61-norctx0 11061 2907 m3ua
+  local-ip 127.0.0.1
+  remote-ip 127.0.0.1
+  sctp-role client
+  role asp
  as as-sender m3ua
   asp asp-sender
   routing-key 1023 23
@@ -63,6 +73,12 @@
  as as-client m3ua
   routing-key 1055 55
   asp asp-client0
+ as as-client60-norctx m3ua
+  routing-key 0 60
+  asp asp-client60-norctx0
+ as as-client61-norctx m3ua
+  routing-key 0 61
+  asp asp-client61-norctx0
 !
 ! IPA AS/ASP:
 !
@@ -116,6 +132,8 @@
   update route 23 16777215 linkset as-sender
   update route 42 16777215 linkset as-receiver
   update route 55 16777215 linkset as-client
+  update route 60 16777215 linkset as-client60-norctx
+  update route 61 16777215 linkset as-client61-norctx
   update route 31 16777215 linkset ipa-as-loadshare-receiver
   update route 33 16777215 linkset ipa-as-override-receiver
   update route 5  16777215 linkset ipa-as-dynamic-asp