Change in osmo-ttcn3-hacks[master]: gbproxy: Configure a Second SGSN

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Sat Jan 16 22:00:53 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21698 )

Change subject: gbproxy: Configure a Second SGSN
......................................................................

gbproxy: Configure a Second SGSN

This adds the required code changes and minimal configuration to both
osmo-gbproxy.cfg and GBProxy_Tests to have osmo-gbproxy connect to two
SGSNs.

No NRI mappings are configured and hence the second SGSN isn't really
used for anything except for bringing the NS-VCs and BVCs up.

Related: OS#4472, SYS#5002
Change-Id: Ib70f7c1a29f089957f882df0e9b05ee526224611
---
M gbproxy/GBProxy_Tests.cfg
M gbproxy/GBProxy_Tests.ttcn
M gbproxy/osmo-gbproxy.cfg
M gbproxy/osmo-gbproxy.fr.cfg
4 files changed, 83 insertions(+), 21 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/gbproxy/GBProxy_Tests.cfg b/gbproxy/GBProxy_Tests.cfg
index 0e442d1..e1e1eff 100644
--- a/gbproxy/GBProxy_Tests.cfg
+++ b/gbproxy/GBProxy_Tests.cfg
@@ -15,7 +15,10 @@
 GBProxy_Tests.mp_nsconfig_sgsn := {
 	{
 		handle_sns := true
+	}, {
+		handle_sns := true
 	}
+
 }
 
 GBProxy_Tests.mp_nsconfig_pcu := {
diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 62daaf4..44b2ac9 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -66,6 +66,24 @@
 					nsvci := 101
 				}
 			}
+		}, {
+			nsei := 102,
+			role_sgsn := true,
+			handle_sns := false,
+			nsvc := {
+				{
+					provider := {
+						ip := {
+							address_family := AF_INET,
+							local_udp_port := 8888,
+							local_ip := "127.0.0.1",
+							remote_udp_port := 23000,
+							remote_ip := "127.0.0.1"
+						}
+					},
+					nsvci := 102
+				}
+			}
 		}
 	};
 	/* BSS NSEI start at 2000 + x
@@ -263,7 +281,7 @@
 type record of NSConfiguration NSConfigurations;
 type record of BssgpCellId BssgpCellIds;
 
-const integer NUM_SGSN := 1;
+const integer NUM_SGSN := 2;
 
 type component test_CT {
 	var GbInstances g_pcu;
@@ -370,11 +388,14 @@
 	gb.vc_BSSGP.start(BssgpStart(gb.cfg, bssgp_id));
 
 	for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i + 1) {
+		/* obtain the component reference of the BSSGP_BVC_CT for each PTP BVC */
 		connect(self:PROC, gb.vc_BSSGP:PROC);
 		gb.vc_BSSGP_BVC[i] := f_bssgp_get_bvci_ct(gb.cfg.bvc[i].bvci, PROC);
 		disconnect(self:PROC, gb.vc_BSSGP:PROC);
+		/* connect all of the per-BVC MGMT ports to our PCU_MGMT port (1:N) */
 		connect(self:PCU_MGMT, gb.vc_BSSGP_BVC[i]:MGMT);
 	}
+	/* connect all of the BSSGP/NSE global MGMT port to our PCU_MGMT port (1:N) */
 	connect(self:PCU_MGMT, gb.vc_BSSGP:MGMT);
 }
 
@@ -390,11 +411,14 @@
 	gb.vc_BSSGP.start(BssgpStart(gb.cfg, bssgp_id));
 
 	for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i + 1) {
+		/* obtain the component reference of the BSSGP_BVC_CT for each PTP BVC */
 		connect(self:PROC, gb.vc_BSSGP:PROC);
 		gb.vc_BSSGP_BVC[i] := f_bssgp_get_bvci_ct(gb.cfg.bvc[i].bvci, PROC);
 		disconnect(self:PROC, gb.vc_BSSGP:PROC);
+		/* connect all of the per-BVC MGMT ports to our SGSN_MGMT port (1:N) */
 		connect(self:SGSN_MGMT, gb.vc_BSSGP_BVC[i]:MGMT);
 	}
+	/* connect all of the BSSGP/NSE global MGMT port to our SGSN_MGMT port (1:N) */
 	connect(self:SGSN_MGMT, gb.vc_BSSGP:MGMT);
 }
 
@@ -425,8 +449,25 @@
 	return false;
 }
 
+private type record of ro_integer roro_integer;
+
+/* count the number of unblocked BVCI for each SGSN NSE */
+private altstep as_count_unblocked4nse(integer sgsn_idx, inout roro_integer bvci_unblocked)
+runs on test_CT {
+	var BssgpStatusIndication bsi;
+	[] SGSN_MGMT.receive(BssgpStatusIndication:{g_sgsn[sgsn_idx].cfg.nsei, ?, BVC_S_UNBLOCKED}) -> value bsi {
+		bvci_unblocked[sgsn_idx] := bvci_unblocked[sgsn_idx] & { bsi.bvci };
+		/* 'repeat' until sufficient number of BVC-rest has been received on all SGSNs */
+		for (var integer i := 0; i < lengthof(bvci_unblocked); i := i+1) {
+			if (lengthof(bvci_unblocked[i]) < lengthof(g_sgsn[i].cfg.bvc)) {
+				repeat;
+			}
+		}
+	}
+}
+
 function f_init(float t_guard := 30.0) runs on test_CT {
-	var ro_integer bvci_unblocked := {};
+	var roro_integer bvci_unblocked;
 	var BssgpStatusIndication bsi;
 	var integer i;
 
@@ -438,17 +479,21 @@
 	g_Tguard.start(t_guard);
 	activate(as_gTguard(g_Tguard));
 
-	g_sgsn[0].cfg := {
-		nsei := mp_nsconfig_sgsn[0].nsei,
-		sgsn_role := true,
-		bvc := { }
-	}
+	var BssgpBvcConfigs bvcs := { };
 	for (i := 0; i < lengthof(mp_gbconfigs); i := i+1) {
 		g_pcu[i].cfg := mp_gbconfigs[i];
 		/* make sure all have a proper crate_cb, which cannot be specified in config file */
 		f_fix_create_cb(g_pcu[i].cfg);
 		/* concatenate all the PCU-side BVCs for the SGSN side */
-		g_sgsn[0].cfg.bvc := g_sgsn[0].cfg.bvc & g_pcu[i].cfg.bvc;
+		bvcs := bvcs & g_pcu[i].cfg.bvc;
+	}
+
+	for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {
+		g_sgsn[i].cfg := {
+			nsei := mp_nsconfig_sgsn[i].nsei,
+			sgsn_role := true,
+			bvc := bvcs
+		}
 	}
 
 	f_init_vty();
@@ -468,16 +513,18 @@
 		f_init_gb_pcu(g_pcu[i], "GbProxy_Test", i);
 	}
 
+	for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {
+		bvci_unblocked[i] := {};
+	}
+
 	/* wait until all BVC are unblocked on both sides */
 	timer T := 15.0;
 	T.start;
 	alt {
-	[] SGSN_MGMT.receive(BssgpStatusIndication:{*, ?, BVC_S_UNBLOCKED}) -> value bsi {
-		bvci_unblocked := bvci_unblocked & { bsi.bvci };
-		if (lengthof(bvci_unblocked) != lengthof(g_sgsn[0].cfg.bvc)) {
-			repeat;
-			}
-		}
+	/* TODO: We need to add more lines if NUM_SGSN increases.  Activating default altsteps
+	 * unfortunately doesn't work as we want to access the local variable bvci_unblocked.  */
+	[] as_count_unblocked4nse(0, bvci_unblocked);
+	[lengthof(g_sgsn) > 1] as_count_unblocked4nse(1, bvci_unblocked);
 	[] SGSN_MGMT.receive(BssgpStatusIndication:{*, ?, ?}) {
 		repeat;
 		}
@@ -505,17 +552,19 @@
 
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for unblock of all BVCs on SGSN side; ",
-			   "unblocked so far: ", bvci_unblocked, "expected: ", g_sgsn[0].cfg.bvc);
+			   "unblocked so far: ", bvci_unblocked);
 		/* don't stop here but print below analysis */
 		}
 	}
 
-	/* iterate over list and check all BVCI */
-	for (i := 0; i < lengthof(g_sgsn[0].cfg.bvc); i := i+1) {
-		var BssgpBvci bvci := g_sgsn[0].cfg.bvc[i].bvci;
-		if (not ro_integer_contains(bvci_unblocked, bvci)) {
-			setverdict(fail, "BVCI=", bvci, " was not unblocked during start-up");
-			mtc.stop;
+	for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {
+		/* iterate over list and check all BVCI */
+		for (var integer j := 0; j < lengthof(g_sgsn[i].cfg.bvc); j := j+1) {
+			var BssgpBvci bvci := g_sgsn[i].cfg.bvc[j].bvci;
+			if (not ro_integer_contains(bvci_unblocked[i], bvci)) {
+				setverdict(fail, "SGSN ", i, " BVCI=", bvci, " was not unblocked during start-up");
+				mtc.stop;
+			}
 		}
 	}
 
diff --git a/gbproxy/osmo-gbproxy.cfg b/gbproxy/osmo-gbproxy.cfg
index 5ce0dfc..1c6caa9 100644
--- a/gbproxy/osmo-gbproxy.cfg
+++ b/gbproxy/osmo-gbproxy.cfg
@@ -7,12 +7,17 @@
 !
 gbproxy
 sgsn nsei 101
+ name first
+sgsn nsei 102
+ name second
 ns
  bind udp local
   listen 127.0.0.1 23000
   accept-ipaccess
  nse 101
   ip-sns 127.0.0.1 7777
+ nse 102
+  ip-sns 127.0.0.1 8888
  timer tns-block 3
  timer tns-block-retries 3
  timer tns-reset 3
diff --git a/gbproxy/osmo-gbproxy.fr.cfg b/gbproxy/osmo-gbproxy.fr.cfg
index 0898acc..e350526 100644
--- a/gbproxy/osmo-gbproxy.fr.cfg
+++ b/gbproxy/osmo-gbproxy.fr.cfg
@@ -35,6 +35,8 @@
  timer tns-alive-retries 10
  nse 101
   ip-sns 127.0.0.1 7777
+ nse 102
+  ip-sns 127.0.0.1 8888
  nse 2001
   nsvc fr hdlcnet1 dlci 16 nsvci 1
   nsvc fr hdlcnet2 dlci 17 nsvci 2
@@ -48,3 +50,6 @@
   nsvc fr hdlcnet8 dlci 23 nsvci 8
 gbproxy
 sgsn nsei 101
+ name first
+sgsn nsei 102
+ name second

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21698
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib70f7c1a29f089957f882df0e9b05ee526224611
Gerrit-Change-Number: 21698
Gerrit-PatchSet: 4
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis at fe80.eu>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210116/d7b51a44/attachment.htm>


More information about the gerrit-log mailing list