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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: nsvc: add a uptime/downtime to track the last state change<br><br>To show adminstrator the last state change of a nsvc add a timestamp and<br>show it on the vty<br><br>> show ns nsei 1234<br>NSEI 01234: UDP, DEAD since 0d 0h 1m 42s<br>[...]<br>  4 NS-VC:<br>   UNBLOCKED DYNAMIC sig_weight=1 data_weight=1 udp)[127.0.0.1]:22000<>[127.0.0.1]:23001 ALIVE since 0d 0h 0m 1s<br>   UNBLOCKED DYNAMIC sig_weight=2 data_weight=2 udp)[127.0.0.1]:22000<>[127.0.0.1]:23000 ALIVE since 0d 0h 0m 1s<br>   UNBLOCKED DYNAMIC sig_weight=2 data_weight=2 udp)[127.0.0.1]:22001<>[127.0.0.1]:23000 ALIVE since 0d 0h 0m 1s<br>   UNBLOCKED DYNAMIC sig_weight=1 data_weight=1 udp)[127.0.0.1]:22001<>[127.0.0.1]:23001 ALIVE since 0d 0h 0m 1s<br><br>Related: OS#5028<br>Change-Id: Ie3a039a209869295afa5feda39297cee81fedf22<br>---<br>M src/gb/gprs_ns2.c<br>M src/gb/gprs_ns2_internal.h<br>M src/gb/gprs_ns2_vc_fsm.c<br>M src/gb/gprs_ns2_vty.c<br>M tests/gb/gprs_ns2_vty.vty<br>5 files changed, 24 insertions(+), 13 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index c00537d..6bccf65 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -621,6 +621,7 @@</span><br><span> </span><br><span>   llist_add_tail(&nsvc->list, &nse->nsvc);</span><br><span>       llist_add_tail(&nsvc->blist, &bind->nsvc);</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_clock_gettime(CLOCK_MONOTONIC, &nsvc->ts_alive_change);</span><br><span>  ns2_nse_update_mtu(nse);</span><br><span> </span><br><span>         return nsvc;</span><br><span>diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h</span><br><span>index cd9969c..bfb12d9 100644</span><br><span>--- a/src/gb/gprs_ns2_internal.h</span><br><span>+++ b/src/gb/gprs_ns2_internal.h</span><br><span>@@ -270,6 +270,9 @@</span><br><span> </span><br><span>  /*! recursive anchor */</span><br><span>      bool freed;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /*! when the NSVC became alive or dead */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct timespec ts_alive_change;</span><br><span> };</span><br><span> </span><br><span> /*! Structure repesenting a bind instance. E.g. IPv4 listen port. */</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 03a355b..fa8cec2 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>@@ -414,8 +414,10 @@</span><br><span>       struct gprs_ns2_vc *nsvc = priv->nsvc;</span><br><span>    struct gprs_ns2_nse *nse = nsvc->nse;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (old_state != GPRS_NS2_ST_UNBLOCKED)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (old_state != GPRS_NS2_ST_UNBLOCKED) {</span><br><span>            RATE_CTR_INC_NS(nsvc, NS_CTR_UNBLOCKED);</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_clock_gettime(CLOCK_MONOTONIC, &nsvc->ts_alive_change);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        priv->accept_unitdata = true;</span><br><span>     ns2_nse_notify_unblocked(nsvc, true);</span><br><span>diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c</span><br><span>index 86471b8..41f581e 100644</span><br><span>--- a/src/gb/gprs_ns2_vty.c</span><br><span>+++ b/src/gb/gprs_ns2_vty.c</span><br><span>@@ -1875,16 +1875,21 @@</span><br><span> void ns2_vty_dump_nsvc(struct vty *vty, struct gprs_ns2_vc *nsvc, bool stats)</span><br><span> {</span><br><span>       if (nsvc->nsvci_is_valid)</span><br><span style="color: hsl(0, 100%, 40%);">-            vty_out(vty, "   NSVCI %05u: %s %s %s%s", nsvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "   NSVCI %05u: %s %s %s %s since ", nsvc->nsvci,</span><br><span>                  osmo_fsm_inst_state_name(nsvc->fi),</span><br><span>                       nsvc->persistent ? "PERSIST" : "DYNAMIC",</span><br><span style="color: hsl(0, 100%, 40%);">-                        gprs_ns2_ll_str(nsvc), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                  gprs_ns2_ll_str(nsvc),</span><br><span style="color: hsl(120, 100%, 40%);">+                        ns2_vc_is_unblocked(nsvc) ? "ALIVE" : "DEAD");</span><br><span>   else</span><br><span style="color: hsl(0, 100%, 40%);">-            vty_out(vty, "   %s %s sig_weight=%u data_weight=%u %s%s",</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, "   %s %s sig_weight=%u data_weight=%u %s %s since ",</span><br><span>                         osmo_fsm_inst_state_name(nsvc->fi),</span><br><span>                       nsvc->persistent ? "PERSIST" : "DYNAMIC",</span><br><span>                     nsvc->sig_weight, nsvc->data_weight,</span><br><span style="color: hsl(0, 100%, 40%);">-                      gprs_ns2_ll_str(nsvc), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                  gprs_ns2_ll_str(nsvc),</span><br><span style="color: hsl(120, 100%, 40%);">+                        ns2_vc_is_unblocked(nsvc) ? "ALIVE" : "DEAD");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vty_out_uptime(vty, &nsvc->ts_alive_change);</span><br><span style="color: hsl(120, 100%, 40%);">+   vty_out_newline(vty);</span><br><span> </span><br><span>    if (stats) {</span><br><span>                 vty_out_rate_ctr_group(vty, "    ", nsvc->ctrg);</span><br><span>diff --git a/tests/gb/gprs_ns2_vty.vty b/tests/gb/gprs_ns2_vty.vty</span><br><span>index 35bee1e..4be10d5 100644</span><br><span>--- a/tests/gb/gprs_ns2_vty.vty</span><br><span>+++ b/tests/gb/gprs_ns2_vty.vty</span><br><span>@@ -40,11 +40,11 @@</span><br><span> OsmoNSdummy# show ns</span><br><span> NSEI 01234: UDP, DEAD since 0d 0h 0m 0s</span><br><span>   1 NS-VC:</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496 DEAD since 0d 0h 0m 0s</span><br><span> UDP bind: 127.0.0.14:42999 DSCP: 0 Priority: 0</span><br><span>   IP-SNS signalling weight: 1 data weight: 1</span><br><span>   1 NS-VC:</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496 DEAD since 0d 0h 0m 0s</span><br><span> OsmoNSdummy# configure terminal</span><br><span> OsmoNSdummy(config)# ns</span><br><span> OsmoNSdummy(config-ns)# nse 1234</span><br><span>@@ -54,15 +54,15 @@</span><br><span> OsmoNSdummy# show ns</span><br><span> NSEI 01234: UDP, DEAD since 0d 0h 0m 0s</span><br><span>   3 NS-VC:</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=0 data_weight=9 udp)[127.0.0.14]:42999<>[127.0.0.16]:9496</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=0 data_weight=0 udp)[127.0.0.14]:42999<>[127.0.0.17]:9496</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496 DEAD since 0d 0h 0m 0s</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=0 data_weight=9 udp)[127.0.0.14]:42999<>[127.0.0.16]:9496 DEAD since 0d 0h 0m 0s</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=0 data_weight=0 udp)[127.0.0.14]:42999<>[127.0.0.17]:9496 DEAD since 0d 0h 0m 0s</span><br><span> UDP bind: 127.0.0.14:42999 DSCP: 0 Priority: 0</span><br><span>   IP-SNS signalling weight: 1 data weight: 1</span><br><span>   3 NS-VC:</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=0 data_weight=9 udp)[127.0.0.14]:42999<>[127.0.0.16]:9496</span><br><span style="color: hsl(0, 100%, 40%);">-   RECOVERING PERSIST sig_weight=0 data_weight=0 udp)[127.0.0.14]:42999<>[127.0.0.17]:9496</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=1 data_weight=1 udp)[127.0.0.14]:42999<>[127.0.0.15]:9496 DEAD since 0d 0h 0m 0s</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=0 data_weight=9 udp)[127.0.0.14]:42999<>[127.0.0.16]:9496 DEAD since 0d 0h 0m 0s</span><br><span style="color: hsl(120, 100%, 40%);">+   RECOVERING PERSIST sig_weight=0 data_weight=0 udp)[127.0.0.14]:42999<>[127.0.0.17]:9496 DEAD since 0d 0h 0m 0s</span><br><span> OsmoNSdummy# configure terminal</span><br><span> OsmoNSdummy(config)# ns</span><br><span> OsmoNSdummy(config-ns)# nse 1234</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/25350">change 25350</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/+/25350"/><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: Ie3a039a209869295afa5feda39297cee81fedf22 </div>
<div style="display:none"> Gerrit-Change-Number: 25350 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </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-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>