<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21222">View Change</a></p><div style="white-space:pre-wrap">Approvals:
laforge: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Allow dynamic connect/disconnect of ConnHdlr at runtime<br><br>We want to move a virtual subscriber between BVC with one NSE,<br>but also to other NSE/PCU at runtime. The number of BVC and NSE<br>may be large in a given test config, and we really don't need<br>hundreds of test ports per component; Instead, reconnect the<br>test ports to whichever BVC we want at runtime.<br><br>Change-Id: I56b088b582f2d070547ee24f2d7a175d84fb5861<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>1 file changed, 50 insertions(+), 23 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn</span><br><span>index 7dd2c17..242b7e9 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -219,12 +219,19 @@</span><br><span> };</span><br><span> </span><br><span> type component BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* array of per-BVC ports on the PCU side */</span><br><span> port BSSGP_PT PCU[NUM_PCU];</span><br><span> port BSSGP_PT PCU_SIG[NUM_PCU];</span><br><span> port BSSGP_PROC_PT PCU_PROC[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+ /* component reference to the component to which we're currently connected */</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSGP_BVC_CT pcu_ct[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* array of per-BVC ports on the SGSN side */</span><br><span> port BSSGP_PT SGSN[NUM_SGSN];</span><br><span> port BSSGP_PT SGSN_SIG[NUM_SGSN];</span><br><span> port BSSGP_PROC_PT SGSN_PROC[NUM_SGSN];</span><br><span style="color: hsl(120, 100%, 40%);">+ /* component reference to the component to which we're currently connected */</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSGP_BVC_CT sgsn_ct[NUM_PCU];</span><br><span> </span><br><span> var BSSGP_ConnHdlrPars g_pars;</span><br><span> timer g_Tguard;</span><br><span>@@ -252,6 +259,7 @@</span><br><span> OCT4 tlli_old optional,</span><br><span> RoutingAreaIdentificationV ra optional,</span><br><span> GbInstances pcu,</span><br><span style="color: hsl(120, 100%, 40%);">+ GbInstances sgsn,</span><br><span> float t_guard</span><br><span> };</span><br><span> </span><br><span>@@ -428,29 +436,50 @@</span><br><span> tlli_old := omit,</span><br><span> ra := omit,</span><br><span> pcu := g_pcu,</span><br><span style="color: hsl(120, 100%, 40%);">+ sgsn := g_sgsn,</span><br><span> t_guard := t_guard</span><br><span> };</span><br><span> </span><br><span> vc_conn := BSSGP_ConnHdlr.create(id);</span><br><span style="color: hsl(0, 100%, 40%);">- // PDU side</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_SIG[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_PROC[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_SIG[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_PROC[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_SIG[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:PCU_PROC[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(0, 100%, 40%);">- // SGSN side</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:SGSN[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:SGSN_SIG[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:SGSN_PROC[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span> </span><br><span> vc_conn.start(f_handler_init(fn, id, pars));</span><br><span> return vc_conn;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Connect the PCU-side per-BVC ports (PCU/PCU_SIG/PCU_PROC) array slot 'port_idx' to specified per-BVC component */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_connect_to_pcu_bvc(integer port_idx, BSSGP_BVC_CT bvc_ct) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (PCU[port_idx].checkstate("Connected")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* unregister + disconnect from old BVC */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_client_unregister(g_pars.imsi, PCU_PROC[port_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:PCU[port_idx], pcu_ct[port_idx]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:PCU_SIG[port_idx], pcu_ct[port_idx]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:PCU_PROC[port_idx], pcu_ct[port_idx]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* connect to new BVC and register us */</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:PCU[port_idx], bvc_ct:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:PCU_SIG[port_idx], bvc_ct:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:PCU_PROC[port_idx], bvc_ct:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_client_register(g_pars.imsi, g_pars.tlli, PCU_PROC[port_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+ pcu_ct[port_idx] := bvc_ct;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Connect the SGSN-side per-BVC ports (SGSN/SGSN_SIG/SGSN_PROC) array slot 'port_idx' to specified per-BVC component */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_connect_to_sgsn_bvc(integer port_idx, BSSGP_BVC_CT bvc_ct) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (SGSN[port_idx].checkstate("Connected")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* unregister + disconnect from old BVC */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_client_unregister(g_pars.imsi, SGSN_PROC[port_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:SGSN[port_idx], sgsn_ct[port_idx]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:SGSN_SIG[port_idx], sgsn_ct[port_idx]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+ disconnect(self:SGSN_PROC[port_idx], sgsn_ct[port_idx]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* connect to new BVC and register us */</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:SGSN[port_idx], bvc_ct:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:SGSN_SIG[port_idx], bvc_ct:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:SGSN_PROC[port_idx], bvc_ct:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_client_register(g_pars.imsi, g_pars.tlli, SGSN_PROC[port_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+ sgsn_ct[port_idx] := bvc_ct;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private altstep as_Tguard() runs on BSSGP_ConnHdlr {</span><br><span> [] g_Tguard.timeout {</span><br><span> setverdict(fail, "Tguard timeout");</span><br><span>@@ -467,16 +496,14 @@</span><br><span> </span><br><span> llc := f_llc_create(false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* register for our IMSI + TLLI */</span><br><span style="color: hsl(0, 100%, 40%);">- for (i := 0; i < sizeof(SGSN_PROC); i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (SGSN_PROC[i].checkstate("Connected")) {</span><br><span style="color: hsl(0, 100%, 40%);">- f_client_register(g_pars.imsi, g_pars.tlli, SGSN_PROC[i]);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* default connections on PCU side: First BVC of each NSE/PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i := 0; i < lengthof(g_pars.pcu); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_connect_to_pcu_bvc(i, g_pars.pcu[i].vc_BSSGP_BVC[0]);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- for (i := 0; i < sizeof(PCU_PROC); i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (PCU_PROC[i].checkstate("Connected")) {</span><br><span style="color: hsl(0, 100%, 40%);">- f_client_register(g_pars.imsi, g_pars.tlli, PCU_PROC[i]);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* default connections on SGSN side: First BVC of each NSE/SGSN */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i := 0; i < lengthof(g_pars.sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_connect_to_sgsn_bvc(i, g_pars.sgsn[i].vc_BSSGP_BVC[0]);</span><br><span> }</span><br><span> </span><br><span> g_Tguard.start(pars.t_guard);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21222">change 21222</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21222"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I56b088b582f2d070547ee24f2d7a175d84fb5861 </div>
<div style="display:none"> Gerrit-Change-Number: 21222 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>