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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">implement all_allocated:{sdcch,tch} rate counters<br><br>Based on allAvailable{SDCCH,TCH}Allocated performance indicators, see<br>3GPP TS 52.402.<br><br>Related: SYS#4878<br>Related: Ib3997a827c9cc43d1361bb0cf3bfab9f6d91bf82 (osmo-ttcn3-hacks)<br>Change-Id: I8b06e435a224c8708cd6c67e97ee5413718fc1ed<br>---<br>M include/osmocom/bsc/bsc_stats.h<br>M include/osmocom/bsc/bts.h<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bsc_init.c<br>M src/osmo-bsc/bsc_stats.c<br>M src/osmo-bsc/bts.c<br>M src/osmo-bsc/lchan_fsm.c<br>M src/osmo-bsc/net_init.c<br>M tests/timer.vty<br>9 files changed, 137 insertions(+), 0 deletions(-)<br><br></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 4250079..9a2f36c 100644</span><br><span>--- a/include/osmocom/bsc/bsc_stats.h</span><br><span>+++ b/include/osmocom/bsc/bsc_stats.h</span><br><span>@@ -81,6 +81,8 @@</span><br><span>        BSC_CTR_MSCPOOL_SUBSCR_NO_MSC,</span><br><span>       BSC_CTR_MSCPOOL_EMERG_FORWARDED,</span><br><span>     BSC_CTR_MSCPOOL_EMERG_LOST,</span><br><span style="color: hsl(120, 100%, 40%);">+   BSC_CTR_ALL_ALLOCATED_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+  BSC_CTR_ALL_ALLOCATED_TCH,</span><br><span> };</span><br><span> </span><br><span> extern const struct rate_ctr_desc bsc_ctr_description[];</span><br><span>@@ -105,3 +107,4 @@</span><br><span> extern const struct osmo_stat_item_group_desc bsc_statg_desc;</span><br><span> </span><br><span> void bsc_update_connection_stats(struct gsm_network *net);</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_update_time_cc_all_allocated(struct gsm_network *net);</span><br><span>diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h</span><br><span>index c887ca8..8677143 100644</span><br><span>--- a/include/osmocom/bsc/bts.h</span><br><span>+++ b/include/osmocom/bsc/bts.h</span><br><span>@@ -158,6 +158,8 @@</span><br><span>    BTS_CTR_SRVCC_TIMEOUT,</span><br><span>       BTS_CTR_SRVCC_FAILED,</span><br><span>        BTS_CTR_SRVCC_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+  BTS_CTR_ALL_ALLOCATED_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+  BTS_CTR_ALL_ALLOCATED_TCH,</span><br><span> };</span><br><span> </span><br><span> extern const struct rate_ctr_desc bts_ctr_description[];</span><br><span>@@ -590,6 +592,9 @@</span><br><span> </span><br><span>   /* At what point in the channel allocation sequence to dispatch the Immediate Assignment (Abis optimization) */</span><br><span>      enum imm_ass_time imm_ass_time;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     struct time_cc all_allocated_sdcch;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct time_cc all_allocated_tch;</span><br><span> };</span><br><span> </span><br><span> #define GSM_BTS_SI2Q(bts, i)   (struct gsm48_system_information_type_2quater *)((bts)->si_buf[SYSINFO_TYPE_2quater][i])</span><br><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 6a60f06..30aab53 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include <osmocom/bsc/meas_rep.h></span><br><span> #include <osmocom/bsc/acc.h></span><br><span> #include <osmocom/bsc/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/time_cc.h></span><br><span> </span><br><span> #define GSM_T3122_DEFAULT 10</span><br><span> </span><br><span>@@ -1260,6 +1261,9 @@</span><br><span>  struct osmo_nri_ranges *null_nri_ranges;</span><br><span> </span><br><span>         struct smlc_config *smlc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   struct time_cc all_allocated_sdcch;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct time_cc all_allocated_tch;</span><br><span> };</span><br><span> </span><br><span> struct gsm_audio_support {</span><br><span>diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c</span><br><span>index bf150cb..11cda69 100644</span><br><span>--- a/src/osmo-bsc/bsc_init.c</span><br><span>+++ b/src/osmo-bsc/bsc_init.c</span><br><span>@@ -120,6 +120,29 @@</span><br><span>    if (!net->bts_unknown_statg)</span><br><span>              goto err_free_all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        net->all_allocated_sdcch = (struct time_cc){</span><br><span style="color: hsl(120, 100%, 40%);">+               .cfg = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      .gran_usec = 1*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                       .forget_sum_usec = 60*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .rate_ctr = rate_ctr_group_get_ctr(net->bsc_ctrs, BSC_CTR_ALL_ALLOCATED_SDCCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                    .T_gran = -16,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .T_round_threshold = -17,</span><br><span style="color: hsl(120, 100%, 40%);">+                     .T_forget_sum = -18,</span><br><span style="color: hsl(120, 100%, 40%);">+                  .T_defs = net->T_defs,</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%);">+    net->all_allocated_tch = (struct time_cc){</span><br><span style="color: hsl(120, 100%, 40%);">+         .cfg = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      .gran_usec = 1*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                       .forget_sum_usec = 60*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .rate_ctr = rate_ctr_group_get_ctr(net->bsc_ctrs, BSC_CTR_ALL_ALLOCATED_TCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                      .T_gran = -16,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .T_round_threshold = -17,</span><br><span style="color: hsl(120, 100%, 40%);">+                     .T_forget_sum = -18,</span><br><span style="color: hsl(120, 100%, 40%);">+                  .T_defs = net->T_defs,</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>         INIT_LLIST_HEAD(&net->bts_rejected);</span><br><span>  gsm_net_update_ctype(net);</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/bsc_stats.c b/src/osmo-bsc/bsc_stats.c</span><br><span>index ccba4a6..20ddd37 100644</span><br><span>--- a/src/osmo-bsc/bsc_stats.c</span><br><span>+++ b/src/osmo-bsc/bsc_stats.c</span><br><span>@@ -25,6 +25,7 @@</span><br><span> </span><br><span> #include <osmocom/bsc/gsm_data.h></span><br><span> #include <osmocom/bsc/bts.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/chan_counts.h></span><br><span> </span><br><span> const struct rate_ctr_desc bsc_ctr_description[] = {</span><br><span>         [BSC_CTR_ASSIGNMENT_ATTEMPTED] =        {"assignment:attempted", "Assignment attempts"},</span><br><span>@@ -102,6 +103,8 @@</span><br><span>                                            "Emergency call requests forwarded to an MSC (see also per-MSC counters"},</span><br><span>        [BSC_CTR_MSCPOOL_EMERG_LOST] =          {"mscpool:emerg:lost",</span><br><span>                                              "Emergency call requests lost because no MSC was found available"},</span><br><span style="color: hsl(120, 100%, 40%);">+        [BSC_CTR_ALL_ALLOCATED_SDCCH] =         {"all_allocated:sdcch", "Cumulative counter of seconds where all SDCCH channels were allocated"},</span><br><span style="color: hsl(120, 100%, 40%);">+ [BSC_CTR_ALL_ALLOCATED_TCH] =           {"all_allocated:tch", "Cumulative counter of seconds where all TCH channels were allocated"},</span><br><span> };</span><br><span> </span><br><span> const struct rate_ctr_group_desc bsc_ctrg_desc = {</span><br><span>@@ -185,4 +188,49 @@</span><br><span>     osmo_stat_item_set(osmo_stat_item_group_get_item(net->bsc_statg, BSC_STAT_NUM_TRX_RSL_CONNECTED),</span><br><span>                            trx_rsl_connected_total);</span><br><span>         osmo_stat_item_set(osmo_stat_item_group_get_item(net->bsc_statg, BSC_STAT_NUM_TRX_TOTAL), num_trx_total);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Make sure to notice cells that become disconnected */</span><br><span style="color: hsl(120, 100%, 40%);">+      bsc_update_time_cc_all_allocated(net);</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%);">+void bsc_update_time_cc_all_allocated(struct gsm_network *net)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_bts *bts;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_bts_trx *trx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    struct chan_counts bsc_counts;</span><br><span style="color: hsl(120, 100%, 40%);">+        chan_counts_zero(&bsc_counts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  llist_for_each_entry(bts, &net->bts_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+              struct chan_counts bts_counts;</span><br><span style="color: hsl(120, 100%, 40%);">+                chan_counts_zero(&bts_counts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          llist_for_each_entry(trx, &bts->trx_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      struct chan_counts trx_counts;</span><br><span style="color: hsl(120, 100%, 40%);">+                        chan_counts_for_trx(&trx_counts, trx);</span><br><span style="color: hsl(120, 100%, 40%);">+                    chan_counts_add(&bts_counts, &trx_counts);</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%);">+           time_cc_set_flag(&bts->all_allocated_sdcch,</span><br><span style="color: hsl(120, 100%, 40%);">+                             bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_SDCCH]</span><br><span style="color: hsl(120, 100%, 40%);">+                             && !bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_SDCCH]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         time_cc_set_flag(&bts->all_allocated_tch,</span><br><span style="color: hsl(120, 100%, 40%);">+                               (bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_TCH_F]</span><br><span style="color: hsl(120, 100%, 40%);">+                             + bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_TCH_H])</span><br><span style="color: hsl(120, 100%, 40%);">+                                 && !(bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_F]</span><br><span style="color: hsl(120, 100%, 40%);">+                                  + bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_H]));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             chan_counts_add(&bsc_counts, &bts_counts);</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%);">+   time_cc_set_flag(&net->all_allocated_sdcch,</span><br><span style="color: hsl(120, 100%, 40%);">+                     bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_SDCCH]</span><br><span style="color: hsl(120, 100%, 40%);">+                     && !bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_SDCCH]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ time_cc_set_flag(&net->all_allocated_tch,</span><br><span style="color: hsl(120, 100%, 40%);">+                       (bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_TCH_F]</span><br><span style="color: hsl(120, 100%, 40%);">+                     + bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_MAX_TOTAL][GSM_LCHAN_TCH_H])</span><br><span style="color: hsl(120, 100%, 40%);">+                         && !(bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_F]</span><br><span style="color: hsl(120, 100%, 40%);">+                          + bsc_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_H]));</span><br><span> }</span><br><span>diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c</span><br><span>index 5701957..880cb22 100644</span><br><span>--- a/src/osmo-bsc/bts.c</span><br><span>+++ b/src/osmo-bsc/bts.c</span><br><span>@@ -211,6 +211,29 @@</span><br><span>     }</span><br><span>    bts->bts_statg = osmo_stat_item_group_alloc(bts, &bts_statg_desc, bts->nr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     bts->all_allocated_sdcch = (struct time_cc){</span><br><span style="color: hsl(120, 100%, 40%);">+               .cfg = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      .gran_usec = 1*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                       .forget_sum_usec = 60*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .rate_ctr = rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_ALL_ALLOCATED_SDCCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                    .T_gran = -16,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .T_round_threshold = -17,</span><br><span style="color: hsl(120, 100%, 40%);">+                     .T_forget_sum = -18,</span><br><span style="color: hsl(120, 100%, 40%);">+                  .T_defs = net->T_defs,</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%);">+    bts->all_allocated_tch = (struct time_cc){</span><br><span style="color: hsl(120, 100%, 40%);">+         .cfg = {</span><br><span style="color: hsl(120, 100%, 40%);">+                      .gran_usec = 1*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                       .forget_sum_usec = 60*1000000,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .rate_ctr = rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_ALL_ALLOCATED_TCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                      .T_gran = -16,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .T_round_threshold = -17,</span><br><span style="color: hsl(120, 100%, 40%);">+                     .T_forget_sum = -18,</span><br><span style="color: hsl(120, 100%, 40%);">+                  .T_defs = net->T_defs,</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>         /* create our primary TRX */</span><br><span>         bts->c0 = gsm_bts_trx_alloc(bts);</span><br><span>         if (!bts->c0) {</span><br><span>@@ -1236,6 +1259,12 @@</span><br><span>  [BTS_CTR_SRVCC_ERROR] = \</span><br><span>            { "srvcc:error",</span><br><span>             "Re-assignment failed for other reason" },</span><br><span style="color: hsl(120, 100%, 40%);">+        [BTS_CTR_ALL_ALLOCATED_SDCCH] = \</span><br><span style="color: hsl(120, 100%, 40%);">+             { "all_allocated:sdcch",</span><br><span style="color: hsl(120, 100%, 40%);">+              "Cumulative counter of seconds where all SDCCH channels were allocated" },</span><br><span style="color: hsl(120, 100%, 40%);">+        [BTS_CTR_ALL_ALLOCATED_TCH] = \</span><br><span style="color: hsl(120, 100%, 40%);">+               { "all_allocated:tch",</span><br><span style="color: hsl(120, 100%, 40%);">+                "Cumulative counter of seconds where all TCH channels were allocated" },</span><br><span> };</span><br><span> </span><br><span> const struct rate_ctr_group_desc bts_ctrg_desc = {</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index d61d032..5ae6df6 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -40,6 +40,7 @@</span><br><span> #include <osmocom/bsc/bsc_msc_data.h></span><br><span> #include <osmocom/bsc/codec_pref.h></span><br><span> #include <osmocom/bsc/bts.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/bsc_stats.h></span><br><span> </span><br><span> static struct osmo_fsm lchan_fsm;</span><br><span> </span><br><span>@@ -517,6 +518,8 @@</span><br><span>         lchan_reset(lchan);</span><br><span>  osmo_fsm_inst_dispatch(lchan->ts->fi, TS_EV_LCHAN_UNUSED, lchan);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   bsc_update_time_cc_all_allocated(bts->network);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* Poll the channel request queue, so that waiting calls can make use of the lchan that just</span><br><span>          * has become unused now. */</span><br><span>         abis_rsl_chan_rqd_queue_poll(bts);</span><br><span>@@ -697,6 +700,8 @@</span><br><span>             return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ bsc_update_time_cc_all_allocated(bts->network);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         lchan->conn = info->for_conn;</span><br><span> </span><br><span>      /* If there is a previous lchan, and the new lchan is on the same cell as previous one,</span><br><span>diff --git a/src/osmo-bsc/net_init.c b/src/osmo-bsc/net_init.c</span><br><span>index 6d88adb..ec2f881 100644</span><br><span>--- a/src/osmo-bsc/net_init.c</span><br><span>+++ b/src/osmo-bsc/net_init.c</span><br><span>@@ -56,6 +56,20 @@</span><br><span>        { .T=-12, .default_val=5, .desc="Timeout for obtaining TA after BSSLAP TA Request" },</span><br><span>      { .T=-13, .default_val=5, .desc="Timeout for RR Channel Mode Modify ACK (BSC <-> MS)" },</span><br><span>     { .T=-14, .default_val=5, .desc="Timeout for RSL Channel Mode Modify ACK (BSC <-> BTS)" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .T = -16, .default_val = 1000, .unit = OSMO_TDEF_MS,</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Granularity for all_allocated:* rate counters: amount of milliseconds that one counter increment"</span><br><span style="color: hsl(120, 100%, 40%);">+                  " represents. See also X17, X18" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { .T = -17, .default_val = 0, .unit = OSMO_TDEF_MS,</span><br><span style="color: hsl(120, 100%, 40%);">+           .desc = "Rounding threshold for all_allocated:* rate counters: round up to the next counter increment"</span><br><span style="color: hsl(120, 100%, 40%);">+                      " after this many milliseconds. If set to half of X16 (or 0), employ the usual round() behavior:"</span><br><span style="color: hsl(120, 100%, 40%);">+                   " round up after half of a granularity period. If set to 1, behave like ceil(): already"</span><br><span style="color: hsl(120, 100%, 40%);">+                    " increment the counter immediately when all channels are allocated. If set >= X16, behave like"</span><br><span style="color: hsl(120, 100%, 40%);">+                 " floor(): only increment after a full X16 period of all channels being occupied."</span><br><span style="color: hsl(120, 100%, 40%);">+                  " See also X16, X18" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { .T = -18, .default_val = 60000, .unit = OSMO_TDEF_MS,</span><br><span style="color: hsl(120, 100%, 40%);">+               .desc = "Forget-sum period for all_allocated:* rate counters:"</span><br><span style="color: hsl(120, 100%, 40%);">+                      " after this amount of idle time, forget internally cumulated time remainders. Zero to always"</span><br><span style="color: hsl(120, 100%, 40%);">+                      " keep remainders. See also X16, X17." },</span><br><span>  { .T=-3111, .default_val=4, .desc="Wait time after lchan was released in error (should be T3111 + 2s)" },</span><br><span>  { .T=-3210, .default_val=20, .desc="After L3 Complete, wait for MSC to confirm" },</span><br><span>         {}</span><br><span>diff --git a/tests/timer.vty b/tests/timer.vty</span><br><span>index 71dd2c1..12c13ad 100644</span><br><span>--- a/tests/timer.vty</span><br><span>+++ b/tests/timer.vty</span><br><span>@@ -29,6 +29,9 @@</span><br><span> net: X12 = 5 s       Timeout for obtaining TA after BSSLAP TA Request (default: 5 s)</span><br><span> net: X13 = 5 s       Timeout for RR Channel Mode Modify ACK (BSC <-> MS) (default: 5 s)</span><br><span> net: X14 = 5 s      Timeout for RSL Channel Mode Modify ACK (BSC <-> BTS) (default: 5 s)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X16 = 1000 ms  Granularity for all_allocated:* rate counters: amount of milliseconds that one counter increment represents. See also X17, X18 (default: 1000 ms)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X17 = 0 ms      Rounding threshold for all_allocated:* rate counters: round up to the next counter increment after this many milliseconds. If set to half of X16 (or 0), employ the usual round() behavior: round up after half of a granularity period. If set to 1, behave like ceil(): already increment the counter immediately when all channels are allocated. If set >= X16, behave like floor(): only increment after a full X16 period of all channels being occupied. See also X16, X18 (default: 0 ms)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X18 = 60000 ms       Forget-sum period for all_allocated:* rate counters: after this amount of idle time, forget internally cumulated time remainders. Zero to always keep remainders. See also X16, X17. (default: 60000 ms)</span><br><span> net: X3111 = 4 s    Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)</span><br><span> net: X3210 = 20 s  After L3 Complete, wait for MSC to confirm (default: 20 s)</span><br><span> mgw: X2427 = 5 s  timeout for MGCP response from MGW (default: 5 s)</span><br><span>@@ -78,6 +81,9 @@</span><br><span> net: X12 = 5 s Timeout for obtaining TA after BSSLAP TA Request (default: 5 s)</span><br><span> net: X13 = 5 s       Timeout for RR Channel Mode Modify ACK (BSC <-> MS) (default: 5 s)</span><br><span> net: X14 = 5 s      Timeout for RSL Channel Mode Modify ACK (BSC <-> BTS) (default: 5 s)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X16 = 1000 ms  Granularity for all_allocated:* rate counters: amount of milliseconds that one counter increment represents. See also X17, X18 (default: 1000 ms)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X17 = 0 ms      Rounding threshold for all_allocated:* rate counters: round up to the next counter increment after this many milliseconds. If set to half of X16 (or 0), employ the usual round() behavior: round up after half of a granularity period. If set to 1, behave like ceil(): already increment the counter immediately when all channels are allocated. If set >= X16, behave like floor(): only increment after a full X16 period of all channels being occupied. See also X16, X18 (default: 0 ms)</span><br><span style="color: hsl(120, 100%, 40%);">+net: X18 = 60000 ms       Forget-sum period for all_allocated:* rate counters: after this amount of idle time, forget internally cumulated time remainders. Zero to always keep remainders. See also X16, X17. (default: 60000 ms)</span><br><span> net: X3111 = 4 s    Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)</span><br><span> net: X3210 = 20 s  After L3 Complete, wait for MSC to confirm (default: 20 s)</span><br><span> mgw: X2427 = 5 s  timeout for MGCP response from MGW (default: 5 s)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25974">change 25974</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/+/25974"/><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: I8b06e435a224c8708cd6c67e97ee5413718fc1ed </div>
<div style="display:none"> Gerrit-Change-Number: 25974 </div>
<div style="display:none"> Gerrit-PatchSet: 12 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>