<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22315">View Change</a></p><div style="white-space:pre-wrap">Approvals:
laforge: Looks good to me, approved
daniel: Looks good to me, but someone else must approve
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">NS_Emulation: Add CTRL port to administratively disable a NS-VC<br><br>This feature is useful in simulating intermittent or permanent transport network<br>outage by simply halting processing of all rx+tx in the specified NS-VC<br>until it is administratively re-enabled.<br><br>Change-Id: I742ecf01de15e3edbf0719371f0217a5739b7c8e<br>RelateD: OS#4521<br>---<br>M library/NS_Emulation.ttcnpp<br>1 file changed, 66 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/NS_Emulation.ttcnpp b/library/NS_Emulation.ttcnpp</span><br><span>index 61ebe95..dc8e0ec 100644</span><br><span>--- a/library/NS_Emulation.ttcnpp</span><br><span>+++ b/library/NS_Emulation.ttcnpp</span><br><span>@@ -107,6 +107,7 @@</span><br><span> }</span><br><span> </span><br><span> type enumerated NsvcState {</span><br><span style="color: hsl(120, 100%, 40%);">+ NSVC_S_DISABLED, /* administratively disabled */</span><br><span> NSVC_S_DEAD_BLOCKED,</span><br><span> NSVC_S_WAIT_RESET,</span><br><span> NSVC_S_ALIVE_BLOCKED,</span><br><span>@@ -128,6 +129,25 @@</span><br><span> out NsUnitdataRequest;</span><br><span> } with { extension "internal" };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* port from our (internal) point of view */</span><br><span style="color: hsl(120, 100%, 40%);">+ type port NS_CTRL_SP_PT message {</span><br><span style="color: hsl(120, 100%, 40%);">+ in NsDisableVcRequest,</span><br><span style="color: hsl(120, 100%, 40%);">+ NsEnableVcRequest;</span><br><span style="color: hsl(120, 100%, 40%);">+ } with { extension "internal" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* port from the user point of view */</span><br><span style="color: hsl(120, 100%, 40%);">+ type port NS_CTRL_PT message {</span><br><span style="color: hsl(120, 100%, 40%);">+ out NsEnableVcRequest,</span><br><span style="color: hsl(120, 100%, 40%);">+ NsDisableVcRequest;</span><br><span style="color: hsl(120, 100%, 40%);">+ } with { extension "internal" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ type record NsDisableVcRequest {</span><br><span style="color: hsl(120, 100%, 40%);">+ Nsvci nsvci</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ type record NsEnableVcRequest {</span><br><span style="color: hsl(120, 100%, 40%);">+ Nsvci nsvci</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type component NS_Provider_CT {</span><br><span> /* upper port, facing to NS_Emulation:NSCP */</span><br><span> port NS_PROVIDER_PT NSE;</span><br><span>@@ -187,6 +207,9 @@</span><br><span> /* port towards the per-NSVC components */</span><br><span> port NSint_PT NSVC;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* control port, used to manipulate at runtime */</span><br><span style="color: hsl(120, 100%, 40%);">+ port NS_CTRL_SP_PT NS_CTRL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* all of the NS configuration a user passes to us */</span><br><span> var NSConfiguration g_config;</span><br><span> var charstring g_id;</span><br><span>@@ -239,7 +262,9 @@</span><br><span> };</span><br><span> </span><br><span> type enumerated NsCtrlRequest {</span><br><span style="color: hsl(0, 100%, 40%);">- StartAliveProcedure (0)</span><br><span style="color: hsl(120, 100%, 40%);">+ StartAliveProcedure (0),</span><br><span style="color: hsl(120, 100%, 40%);">+ DisableReq (1), /* administratively disable NS-VC */</span><br><span style="color: hsl(120, 100%, 40%);">+ EnableReq (2) /* administratively enable NS-VC */</span><br><span> };</span><br><span> </span><br><span> /* add one NSVC (component and table entry */</span><br><span>@@ -346,6 +371,8 @@</span><br><span> var NsStatusIndication rx_nssi;</span><br><span> var NsUnitdataIndication rx_nsudi;</span><br><span> var NsUnitdataRequest rx_nsudr;</span><br><span style="color: hsl(120, 100%, 40%);">+ var NsDisableVcRequest rx_disar;</span><br><span style="color: hsl(120, 100%, 40%);">+ var NsEnableVcRequest rx_enar;</span><br><span> /* pass from NS-VCs up to user */</span><br><span> [] NSVC.receive(tr_NsStsInd(g_config.nsei, ?, ?, NSVC_S_ALIVE_UNBLOCKED)) -> value rx_nssi {</span><br><span> /* check if this one is the first to be unblocked */</span><br><span>@@ -384,6 +411,14 @@</span><br><span> log2str("Received UnitDataInd for invalid NSEI: ", rx_nsudi));</span><br><span> }</span><br><span> /* from user down to NS-VC */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NS_CTRL.receive(NsDisableVcRequest:?) -> value rx_disar {</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer nsvc_idx := f_nsvc_find_idx(rx_disar.nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+ NSVC.send(NsCtrlRequest:DisableReq) to g_nsvcs[nsvc_idx].vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NS_CTRL.receive(NsEnableVcRequest:?) -> value rx_enar {</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer nsvc_idx := f_nsvc_find_idx(rx_enar.nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+ NSVC.send(NsCtrlRequest:EnableReq) to g_nsvcs[nsvc_idx].vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> [] NS_SP.receive(tr_NsUdReq(g_config.nsei, 0, ?, ?, *)) -> value rx_nsudr {</span><br><span> /* load distribution function */</span><br><span> var integer nsvc_idx := g_unblocked_nsvcs_sig[rx_nsudr.lsp mod lengthof(g_unblocked_nsvcs_sig)];</span><br><span>@@ -577,6 +612,15 @@</span><br><span> var PDU_NS rf;</span><br><span> var ASP_Event evt;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ [] NS_SP.receive(NsCtrlRequest:DisableReq) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* To make NS-VCG remove us from list of active NS-VC */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_change_state(NSVC_S_DEAD_BLOCKED);</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Disabling NSVC on user request");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_change_state(NSVC_S_DISABLED);</span><br><span style="color: hsl(120, 100%, 40%);">+ Tns_test.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ Tns_alive.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* transition to DEAD if t_alive times out */</span><br><span> [] Tns_alive.timeout {</span><br><span> log("Tns-alive expired: changing to DEAD_BLOCKED + starting Tns-test");</span><br><span>@@ -618,6 +662,25 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ private altstep as_disabled() runs on NSVC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ [g_config.handle_sns == true] NS_SP.receive(NsCtrlRequest:EnableReq) {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_change_state(NSVC_S_ALIVE_UNBLOCKED);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_sendAlive();</span><br><span style="color: hsl(120, 100%, 40%);">+ Tns_test.start;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ [g_config.handle_sns == false] NS_SP.receive(NsCtrlRequest:EnableReq) {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_change_state(NSVC_S_DEAD_BLOCKED);</span><br><span style="color: hsl(120, 100%, 40%);">+ Tns_test.start;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* drop any received messages while in this state */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NSCP.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Dropping inbound NS mesage as NS-VC is disabled");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] NS_SP.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Dropping user primitive as NS-VC is disabled");</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%);">+</span><br><span> private altstep as_handle_reset() runs on NSVC_CT {</span><br><span> var PDU_NS rf;</span><br><span> </span><br><span>@@ -808,7 +871,8 @@</span><br><span> [vc_state == NSVC_S_WAIT_RESET] as_wait_reset();</span><br><span> [vc_state == NSVC_S_ALIVE_BLOCKED] as_alive_blocked();</span><br><span> [vc_state == NSVC_S_ALIVE_UNBLOCKED] as_alive_unblocked();</span><br><span style="color: hsl(0, 100%, 40%);">- [] as_allstate();</span><br><span style="color: hsl(120, 100%, 40%);">+ [vc_state == NSVC_S_DISABLED] as_disabled();</span><br><span style="color: hsl(120, 100%, 40%);">+ [vc_state != NSVC_S_DISABLED] as_allstate();</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22315">change 22315</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/+/22315"/><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: I742ecf01de15e3edbf0719371f0217a5739b7c8e </div>
<div style="display:none"> Gerrit-Change-Number: 22315 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </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: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>