<p>daniel <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/21231">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  daniel: Looks good to me, approved
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: Add a function to set the NSVC FSM back to unconfigured<br><br>The function gprs_ns2_vs_force_unconfigured() resets the NSVC state back<br>to the initial value when it was first started. This can be useful for<br>testing.<br><br>Related: SYS#5002<br>Change-Id: If96d56b19959372af4eba009661be19e985b4d51<br>---<br>M src/gb/gprs_ns2_internal.h<br>M src/gb/gprs_ns2_vc_fsm.c<br>2 files changed, 40 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h</span><br><span>index dee3ab7..493b391 100644</span><br><span>--- a/src/gb/gprs_ns2_internal.h</span><br><span>+++ b/src/gb/gprs_ns2_internal.h</span><br><span>@@ -286,6 +286,7 @@</span><br><span> struct osmo_fsm_inst *gprs_ns2_vc_fsm_alloc(struct gprs_ns2_vc *nsvc,</span><br><span>                                            const char *id, bool initiate);</span><br><span> int gprs_ns2_vc_fsm_start(struct gprs_ns2_vc *nsvc);</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_ns2_vc_force_unconfigured(struct gprs_ns2_vc *nsvc);</span><br><span> int gprs_ns2_vc_rx(struct gprs_ns2_vc *nsvc, struct msgb *msg, struct tlv_parsed *tp);</span><br><span> int gprs_ns2_vc_is_alive(struct gprs_ns2_vc *nsvc);</span><br><span> int gprs_ns2_vc_is_unblocked(struct gprs_ns2_vc *nsvc);</span><br><span>diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>index 2761210..08b6b2d 100644</span><br><span>--- a/src/gb/gprs_ns2_vc_fsm.c</span><br><span>+++ b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>@@ -110,20 +110,23 @@</span><br><span>  GPRS_NS2_EV_STATUS,</span><br><span> </span><br><span>      GPRS_NS2_EV_UNITDATA,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       GPRS_NS2_EV_FORCE_UNCONFIGURED,</span><br><span> };</span><br><span> </span><br><span> static const struct value_string gprs_ns2_vc_event_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-     { GPRS_NS2_EV_START,            "START" },</span><br><span style="color: hsl(0, 100%, 40%);">-    { GPRS_NS2_EV_RESET,            "RESET" },</span><br><span style="color: hsl(0, 100%, 40%);">-    { GPRS_NS2_EV_RESET_ACK,        "RESET_ACK" },</span><br><span style="color: hsl(0, 100%, 40%);">-        { GPRS_NS2_EV_UNBLOCK,          "UNBLOCK" },</span><br><span style="color: hsl(0, 100%, 40%);">-  { GPRS_NS2_EV_UNBLOCK_ACK,      "UNBLOCK_ACK" },</span><br><span style="color: hsl(0, 100%, 40%);">-      { GPRS_NS2_EV_BLOCK,            "BLOCK" },</span><br><span style="color: hsl(0, 100%, 40%);">-    { GPRS_NS2_EV_BLOCK_ACK,        "BLOCK_ACK" },</span><br><span style="color: hsl(0, 100%, 40%);">-        { GPRS_NS2_EV_ALIVE,            "ALIVE" },</span><br><span style="color: hsl(0, 100%, 40%);">-    { GPRS_NS2_EV_ALIVE_ACK,        "ALIVE_ACK" },</span><br><span style="color: hsl(0, 100%, 40%);">-        { GPRS_NS2_EV_STATUS,           "STATUS" },</span><br><span style="color: hsl(0, 100%, 40%);">-   { GPRS_NS2_EV_UNITDATA,         "UNITDATA" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { GPRS_NS2_EV_START,                    "START" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { GPRS_NS2_EV_RESET,                    "RESET" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { GPRS_NS2_EV_RESET_ACK,                "RESET_ACK" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { GPRS_NS2_EV_UNBLOCK,                  "UNBLOCK" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { GPRS_NS2_EV_UNBLOCK_ACK,              "UNBLOCK_ACK" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { GPRS_NS2_EV_BLOCK,                    "BLOCK" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { GPRS_NS2_EV_BLOCK_ACK,                "BLOCK_ACK" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { GPRS_NS2_EV_ALIVE,                    "ALIVE" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { GPRS_NS2_EV_ALIVE_ACK,                "ALIVE_ACK" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { GPRS_NS2_EV_STATUS,                   "STATUS" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { GPRS_NS2_EV_UNITDATA,                 "UNITDATA" },</span><br><span style="color: hsl(120, 100%, 40%);">+       {GPRS_NS2_EV_FORCE_UNCONFIGURED,        "FORCE_UNCONFIGURED"},</span><br><span>     { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -379,7 +382,8 @@</span><br><span>  [GPRS_NS2_ST_RESET] = {</span><br><span>              .in_event_mask = S(GPRS_NS2_EV_RESET_ACK) | S(GPRS_NS2_EV_RESET),</span><br><span>            .out_state_mask = S(GPRS_NS2_ST_RESET) |</span><br><span style="color: hsl(0, 100%, 40%);">-                                  S(GPRS_NS2_ST_BLOCKED),</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_NS2_ST_BLOCKED) |</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(GPRS_NS2_ST_UNCONFIGURED),</span><br><span>               .name = "RESET",</span><br><span>           .action = gprs_ns2_st_reset,</span><br><span>                 .onenter = gprs_ns2_st_reset_onenter,</span><br><span>@@ -389,7 +393,8 @@</span><br><span>          S(GPRS_NS2_EV_UNBLOCK) | S(GPRS_NS2_EV_UNBLOCK_ACK),</span><br><span>                 .out_state_mask = S(GPRS_NS2_ST_RESET) |</span><br><span>                               S(GPRS_NS2_ST_UNBLOCKED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                              S(GPRS_NS2_ST_BLOCKED),</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_NS2_ST_BLOCKED) |</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(GPRS_NS2_ST_UNCONFIGURED),</span><br><span>               .name = "BLOCKED",</span><br><span>                 .action = gprs_ns2_st_blocked,</span><br><span>               .onenter = gprs_ns2_st_blocked_onenter,</span><br><span>@@ -397,7 +402,8 @@</span><br><span>        [GPRS_NS2_ST_UNBLOCKED] = {</span><br><span>          .in_event_mask = S(GPRS_NS2_EV_BLOCK),</span><br><span>               .out_state_mask = S(GPRS_NS2_ST_RESET) | S(GPRS_NS2_ST_ALIVE) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_NS2_ST_BLOCKED),</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_NS2_ST_BLOCKED) |</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(GPRS_NS2_ST_UNCONFIGURED),</span><br><span>               .name = "UNBLOCKED",</span><br><span>               .action = gprs_ns2_st_unblocked,</span><br><span>             .onenter = gprs_ns2_st_unblocked_on_enter,</span><br><span>@@ -407,7 +413,8 @@</span><br><span>     [GPRS_NS2_ST_ALIVE] = {</span><br><span>              .in_event_mask = S(GPRS_NS2_EV_ALIVE_ACK),</span><br><span>           .out_state_mask = S(GPRS_NS2_ST_RESET) |</span><br><span style="color: hsl(0, 100%, 40%);">-                                  S(GPRS_NS2_ST_UNBLOCKED),</span><br><span style="color: hsl(120, 100%, 40%);">+                             S(GPRS_NS2_ST_UNBLOCKED) |</span><br><span style="color: hsl(120, 100%, 40%);">+                            S(GPRS_NS2_ST_UNCONFIGURED),</span><br><span>               .name = "ALIVE",</span><br><span>           .action = gprs_ns2_st_alive,</span><br><span>                 .onenter = gprs_ns2_st_alive_onenter,</span><br><span>@@ -558,6 +565,12 @@</span><br><span> </span><br><span>             msgb_free(msg);</span><br><span>              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GPRS_NS2_EV_FORCE_UNCONFIGURED:</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Force the NSVC back to its initial state */</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_UNCONFIGURED, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_fsm_inst_dispatch(fi, GPRS_NS2_EV_START, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          return;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span>@@ -574,9 +587,10 @@</span><br><span>    .states = gprs_ns2_vc_states,</span><br><span>        .num_states = ARRAY_SIZE(gprs_ns2_vc_states),</span><br><span>        .allstate_event_mask = S(GPRS_NS2_EV_UNITDATA) |</span><br><span style="color: hsl(0, 100%, 40%);">-                        S(GPRS_NS2_EV_RESET) |</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_NS2_EV_RESET) |</span><br><span>                               S(GPRS_NS2_EV_ALIVE) |</span><br><span style="color: hsl(0, 100%, 40%);">-                          S(GPRS_NS2_EV_ALIVE_ACK),</span><br><span style="color: hsl(120, 100%, 40%);">+                             S(GPRS_NS2_EV_ALIVE_ACK) |</span><br><span style="color: hsl(120, 100%, 40%);">+                            S(GPRS_NS2_EV_FORCE_UNCONFIGURED),</span><br><span>    .allstate_action = gprs_ns2_vc_fsm_allstate_action,</span><br><span>  .cleanup = gprs_ns2_vc_fsm_clean,</span><br><span>    .timer_cb = gprs_ns2_vc_fsm_timer_cb,</span><br><span>@@ -626,6 +640,14 @@</span><br><span>         return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Reset a NS-VC FSM.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param nsvc the virtual circuit</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success; negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_ns2_vc_force_unconfigured(struct gprs_ns2_vc *nsvc)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      return osmo_fsm_inst_dispatch(nsvc->fi, GPRS_NS2_EV_FORCE_UNCONFIGURED, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! entry point for messages from the driver/VL</span><br><span>  *  \param nsvc virtual circuit on which the message was received</span><br><span>  *  \param msg message that was received</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/21231">change 21231</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/libosmocore/+/21231"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If96d56b19959372af4eba009661be19e985b4d51 </div>
<div style="display:none"> Gerrit-Change-Number: 21231 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </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-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>