<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26384">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stats: add bsc.paging:expired<br><br>Similar to paging:attempted, count paging:expired not only per BTS, but<br>also for the whole BSC. Add the timer bsc_T3113 to increase the counter<br>only once if paging expires, and not once per BTS where paging expired.<br><br>Related: SYS#4878<br>Change-Id: I9c118e7e3d61ed8c9f1951111255b196905eba4d<br>---<br>M include/osmocom/bsc/bsc_stats.h<br>M include/osmocom/bsc/bsc_subscriber.h<br>M src/osmo-bsc/bsc_stats.c<br>M src/osmo-bsc/osmo_bsc_bssap.c<br>M src/osmo-bsc/paging.c<br>5 files changed, 55 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/84/26384/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bsc_stats.h b/include/osmocom/bsc/bsc_stats.h</span><br><span>index 9140f85..801a2c1 100644</span><br><span>--- a/include/osmocom/bsc/bsc_stats.h</span><br><span>+++ b/include/osmocom/bsc/bsc_stats.h</span><br><span>@@ -76,6 +76,7 @@</span><br><span>        BSC_CTR_PAGING_ATTEMPTED,</span><br><span>    BSC_CTR_PAGING_DETACHED,</span><br><span>     BSC_CTR_PAGING_RESPONDED,</span><br><span style="color: hsl(120, 100%, 40%);">+     BSC_CTR_PAGING_EXPIRED,</span><br><span>      BSC_CTR_PAGING_NO_ACTIVE_PAGING,</span><br><span>     BSC_CTR_UNKNOWN_UNIT_ID,</span><br><span>     BSC_CTR_MSCPOOL_SUBSCR_NO_MSC,</span><br><span>diff --git a/include/osmocom/bsc/bsc_subscriber.h b/include/osmocom/bsc/bsc_subscriber.h</span><br><span>index 6fffafd..7736f38 100644</span><br><span>--- a/include/osmocom/bsc/bsc_subscriber.h</span><br><span>+++ b/include/osmocom/bsc/bsc_subscriber.h</span><br><span>@@ -5,6 +5,7 @@</span><br><span> #include <stdint.h></span><br><span> </span><br><span> #include <osmocom/core/linuxlist.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/timer.h></span><br><span> #include <osmocom/core/use_count.h></span><br><span> #include <osmocom/gsm/protocol/gsm_23_003.h></span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span>@@ -17,6 +18,9 @@</span><br><span> </span><br><span>        char imsi[GSM23003_IMSI_MAX_DIGITS+1];</span><br><span>       uint32_t tmsi;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Paging expired timer to increase bsc.paging:expired */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct osmo_timer_list bsc_T3113;</span><br><span> };</span><br><span> </span><br><span> const char *bsc_subscr_name(struct bsc_subscr *bsub);</span><br><span>diff --git a/src/osmo-bsc/bsc_stats.c b/src/osmo-bsc/bsc_stats.c</span><br><span>index c789aea..b48c90a 100644</span><br><span>--- a/src/osmo-bsc/bsc_stats.c</span><br><span>+++ b/src/osmo-bsc/bsc_stats.c</span><br><span>@@ -93,6 +93,7 @@</span><br><span>        [BSC_CTR_PAGING_ATTEMPTED] =            {"paging:attempted", "Paging attempts for a subscriber"},</span><br><span>        [BSC_CTR_PAGING_DETACHED] =             {"paging:detached", "Paging request send failures because no responsible BTS was found"},</span><br><span>        [BSC_CTR_PAGING_RESPONDED] =            {"paging:responded", "Paging attempts with successful response"},</span><br><span style="color: hsl(120, 100%, 40%);">+ [BSC_CTR_PAGING_EXPIRED] =              {"paging:expired", "Paging Request expired because of timeout T3113"},</span><br><span>   [BSC_CTR_PAGING_NO_ACTIVE_PAGING] =     {"paging:no_active_paging", "Paging response without an active paging request (arrived after paging expiration?)"},</span><br><span> </span><br><span>  [BSC_CTR_UNKNOWN_UNIT_ID] =             {"abis:unknown_unit_id", "Connection attempts from unknown IPA CCM Unit ID"},</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>index 904da62..bac691a 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>@@ -335,6 +335,48 @@</span><br><span>    return bsc_paging_start(&paging);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void bsc_paging_T3113_expired(void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct bsc_paging_params *params = (struct bsc_paging_params *)data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        log_set_context(LOG_CTX_BSC_SUBSCR, params->bsub);</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DPAG, LOGL_DEBUG, "T3113 expired for %s, increasing bsc.paging:expired\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          bsc_subscr_name(params->bsub));</span><br><span style="color: hsl(120, 100%, 40%);">+       log_set_context(LOG_CTX_BSC_SUBSCR, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  rate_ctr_inc(rate_ctr_group_get_ctr(bsc_gsmnet->bsc_ctrs, BSC_CTR_PAGING_EXPIRED));</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%);">+/*! Start the BSC's T3113 to increase the bsc.paging:expired if needed */</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_paging_start_timer(struct bsc_paging_params *params)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_bts *bts_i;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int timeout_s = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct timeval now;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_gettimeofday(&now, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* T3113 may be different per BTS (especially if set to dynamic), so</span><br><span style="color: hsl(120, 100%, 40%);">+   * get the max of T3113 of all BTS where the subscriber was paged */</span><br><span style="color: hsl(120, 100%, 40%);">+  llist_for_each_entry(bts_i, &bsc_gsmnet->bts_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+             struct gsm_paging_request *req;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             llist_for_each_entry(req, &bts_i->paging.pending_requests, entry) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    struct timeval remaining;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (req->bsub != params->bsub)</span><br><span style="color: hsl(120, 100%, 40%);">+                          continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_timer_remaining(&req->T3113, &now, &remaining);</span><br><span style="color: hsl(120, 100%, 40%);">+                   timeout_s = OSMO_MAX(timeout_s, remaining.tv_sec);</span><br><span style="color: hsl(120, 100%, 40%);">+                    break;</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 style="color: hsl(120, 100%, 40%);">+   osmo_timer_setup(&params->bsub->bsc_T3113, bsc_paging_T3113_expired, params);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_timer_schedule(&params->bsub->bsc_T3113, timeout_s, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int bsc_paging_start(struct bsc_paging_params *params)</span><br><span> {</span><br><span>   rate_ctr_inc(rate_ctr_group_get_ctr(bsc_gsmnet->bsc_ctrs, BSC_CTR_PAGING_ATTEMPTED));</span><br><span>@@ -388,6 +430,8 @@</span><br><span>               break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ bsc_paging_start_timer(params);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    bsc_subscr_put(params->bsub, BSUB_USE_PAGING_START);</span><br><span>      log_set_context(LOG_CTX_BSC_SUBSCR, NULL);</span><br><span>   return 0;</span><br><span>diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c</span><br><span>index 04512be..b4a3881 100644</span><br><span>--- a/src/osmo-bsc/paging.c</span><br><span>+++ b/src/osmo-bsc/paging.c</span><br><span>@@ -411,6 +411,8 @@</span><br><span>             return 1;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_timer_del(&bsub->bsc_T3113);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span>@@ -479,6 +481,9 @@</span><br><span>                     count++;</span><br><span>             }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_timer_del(&bsub->bsc_T3113);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   return count;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26384">change 26384</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-bsc/+/26384"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I9c118e7e3d61ed8c9f1951111255b196905eba4d </div>
<div style="display:none"> Gerrit-Change-Number: 26384 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>