<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>