<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14113">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  osmith: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cbch: Add counters; queue length limits and CBCH LOAD reporting<br><br>This adds the final missing part to full CBCH support:<br>* keep a tab on the current queue length for basic + extended CBCH<br>* keep rate counters about the number of sent / transmitted SMSCB<br>* send CBCH LOAD information via RSL to the BSC<br><br>Change-Id: I7068c7937a60a900c40439115bb84dc3ee0d061f<br>---<br>M include/osmo-bts/cbch.h<br>M include/osmo-bts/gsm_data_shared.h<br>M include/osmo-bts/rsl.h<br>M src/common/bts.c<br>M src/common/cbch.c<br>M src/common/rsl.c<br>M src/common/vty.c<br>7 files changed, 137 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/cbch.h b/include/osmo-bts/cbch.h</span><br><span>index af5fd9a..6bba5fa 100644</span><br><span>--- a/include/osmo-bts/cbch.h</span><br><span>+++ b/include/osmo-bts/cbch.h</span><br><span>@@ -6,6 +6,14 @@</span><br><span> #include <osmo-bts/gsm_data.h></span><br><span> #include <osmo-bts/bts.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+    CBCH_CTR_RCVD_QUEUED,</span><br><span style="color: hsl(120, 100%, 40%);">+ CBCH_CTR_RCVD_DROPPED,</span><br><span style="color: hsl(120, 100%, 40%);">+        CBCH_CTR_SENT_SINGLE,</span><br><span style="color: hsl(120, 100%, 40%);">+ CBCH_CTR_SENT_DEFAULT,</span><br><span style="color: hsl(120, 100%, 40%);">+        CBCH_CTR_SENT_NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* incoming SMS broadcast command from RSL */</span><br><span> int bts_process_smscb_cmd(struct gsm_bts *bts, struct rsl_ie_cb_cmd_type cmd_type,</span><br><span>                       bool extended_cbch, uint8_t msg_len, const uint8_t *msg);</span><br><span>diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h</span><br><span>index 860c296..415e6bc 100644</span><br><span>--- a/include/osmo-bts/gsm_data_shared.h</span><br><span>+++ b/include/osmo-bts/gsm_data_shared.h</span><br><span>@@ -542,6 +542,7 @@</span><br><span> struct bts_smscb_state {</span><br><span>   struct llist_head queue; /* list of struct smscb_msg */</span><br><span>      int queue_len;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct rate_ctr_group *ctrs;</span><br><span>         struct smscb_msg *cur_msg; /* current SMS-CB */</span><br><span>      struct smscb_msg *default_msg; /* default broadcast message; NULL if none */</span><br><span> };</span><br><span>@@ -744,6 +745,9 @@</span><br><span>     /* State for SMSCB (Cell Broadcast) for BASIC and EXTENDED channel */</span><br><span>        struct bts_smscb_state smscb_basic;</span><br><span>  struct bts_smscb_state smscb_extended;</span><br><span style="color: hsl(120, 100%, 40%);">+        int smscb_queue_tgt_len; /* ideal/target queue length */</span><br><span style="color: hsl(120, 100%, 40%);">+      int smscb_queue_max_len; /* maximum queue length */</span><br><span style="color: hsl(120, 100%, 40%);">+   int smscb_queue_hyst; /* hysteresis for CBCH laod indications */</span><br><span> </span><br><span>         float min_qual_rach;    /* minimum quality for RACH bursts */</span><br><span>        float min_qual_norm;    /* minimum quality for normal daata */</span><br><span>diff --git a/include/osmo-bts/rsl.h b/include/osmo-bts/rsl.h</span><br><span>index 0361841..186018e 100644</span><br><span>--- a/include/osmo-bts/rsl.h</span><br><span>+++ b/include/osmo-bts/rsl.h</span><br><span>@@ -43,4 +43,6 @@</span><br><span> void cb_ts_connected(struct gsm_bts_trx_ts *ts, int rc);</span><br><span> void ipacc_dyn_pdch_complete(struct gsm_bts_trx_ts *ts, int rc);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_tx_cbch_load_indication(struct gsm_bts *bts, bool ext_cbch, bool overflow, uint8_t amount);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif // _RSL_H */</span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index 4af219b..5220406 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -49,6 +49,7 @@</span><br><span> #include <osmo-bts/oml.h></span><br><span> #include <osmo-bts/signal.h></span><br><span> #include <osmo-bts/dtx_dl_amr_fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/cbch.h></span><br><span> </span><br><span> #define MIN_QUAL_RACH    5.0f   /* at least  5 dB C/I */</span><br><span> #define MIN_QUAL_NORM   -0.5f   /* at least -1 dB C/I */</span><br><span>@@ -105,6 +106,22 @@</span><br><span>       bts_ctr_desc</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct rate_ctr_desc cbch_ctr_desc[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ [CBCH_CTR_RCVD_QUEUED] =        {"cbch:rcvd_queued", "Received + queued CBCH messages (Abis)" },</span><br><span style="color: hsl(120, 100%, 40%);">+  [CBCH_CTR_RCVD_DROPPED] =       {"cbch:rcvd_dropped", "Received + dropped CBCH messages (Abis)" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      [CBCH_CTR_SENT_SINGLE] =        {"cbch:sent_single", "Sent single CBCH messages (Um)" },</span><br><span style="color: hsl(120, 100%, 40%);">+  [CBCH_CTR_SENT_DEFAULT] =       {"cbch:sent_default", "Sent default CBCH messages (Um)" },</span><br><span style="color: hsl(120, 100%, 40%);">+        [CBCH_CTR_SENT_NULL] =          {"cbch:sent_null", "Sent NULL CBCH messages (Um)" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct rate_ctr_group_desc cbch_ctrg_desc = {</span><br><span style="color: hsl(120, 100%, 40%);">+      "cbch",</span><br><span style="color: hsl(120, 100%, 40%);">+     "cell broadcast channel",</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_STATS_CLASS_GLOBAL,</span><br><span style="color: hsl(120, 100%, 40%);">+      ARRAY_SIZE(cbch_ctr_desc),</span><br><span style="color: hsl(120, 100%, 40%);">+    cbch_ctr_desc</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Initialize the BTS data structures, called before config</span><br><span>  * file reading */</span><br><span> int bts_init(struct gsm_bts *bts)</span><br><span>@@ -191,7 +208,15 @@</span><br><span>         }</span><br><span> </span><br><span>        INIT_LLIST_HEAD(&bts->smscb_basic.queue);</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->smscb_basic.ctrs = rate_ctr_group_alloc(bts, &cbch_ctrg_desc, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(bts->smscb_basic.ctrs);</span><br><span>       INIT_LLIST_HEAD(&bts->smscb_extended.queue);</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->smscb_extended.ctrs = rate_ctr_group_alloc(bts, &cbch_ctrg_desc, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(bts->smscb_extended.ctrs);</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->smscb_queue_max_len = 15;</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->smscb_queue_tgt_len = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->smscb_queue_hyst = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      INIT_LLIST_HEAD(&bts->oml_queue);</span><br><span> </span><br><span>         /* register DTX DL FSM */</span><br><span>diff --git a/src/common/cbch.c b/src/common/cbch.c</span><br><span>index 2107f11..6b65679 100644</span><br><span>--- a/src/common/cbch.c</span><br><span>+++ b/src/common/cbch.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> </span><br><span> #include <osmo-bts/bts.h></span><br><span> #include <osmo-bts/cbch.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/rsl.h></span><br><span> #include <osmo-bts/logging.h></span><br><span> </span><br><span> /* internal representation of one SMS-CB message (e.g. in the pending queue */</span><br><span>@@ -37,6 +38,28 @@</span><br><span>         uint8_t num_segs;               /* total number of segments */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* determine if current queue length differes more than permitted hysteresis from target</span><br><span style="color: hsl(120, 100%, 40%);">+ * queue length. If it does, send CBCH LOAD IND */</span><br><span style="color: hsl(120, 100%, 40%);">+static void check_and_send_cbch_load(struct gsm_bts *bts, struct bts_smscb_state *bts_ss)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  int delta = bts_ss->queue_len - bts->smscb_queue_tgt_len;</span><br><span style="color: hsl(120, 100%, 40%);">+       bool extended_cbch = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (bts_ss == &bts->smscb_extended)</span><br><span style="color: hsl(120, 100%, 40%);">+            extended_cbch = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (abs(delta) < bts->smscb_queue_hyst)</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (delta < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Underrun */</span><br><span style="color: hsl(120, 100%, 40%);">+                rsl_tx_cbch_load_indication(bts, extended_cbch, false, OSMO_MIN(15, -delta));</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Overrun */</span><br><span style="color: hsl(120, 100%, 40%);">+         rsl_tx_cbch_load_indication(bts, extended_cbch, true, OSMO_MIN(15, delta));</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> /* determine SMSCB state by tb number */</span><br><span> static struct bts_smscb_state *bts_smscb_state(struct gsm_bts *bts, uint8_t tb)</span><br><span> {</span><br><span>@@ -182,9 +205,16 @@</span><br><span>    case RSL_CB_CMD_TYPE_SCHEDULE:</span><br><span>       case RSL_CB_CMD_TYPE_NULL:</span><br><span>           /* def_bcast is ignored as per Section 9.3.41 of 3GPP TS 48.058 */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* limit queue size and optionally send CBCH LOAD Information (overflow) via RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (bts_ss->queue_len >= bts->smscb_queue_max_len) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc2(bts_ss->ctrs, CBCH_CTR_RCVD_DROPPED);</span><br><span style="color: hsl(120, 100%, 40%);">+                        talloc_free(scm);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>            llist_add_tail(&scm->list, &bts_ss->queue);</span><br><span>            bts_ss->queue_len++;</span><br><span style="color: hsl(0, 100%, 40%);">-         /* FIXME: limit queue size and optionally send CBCH LOAD Information (overflow) via RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+            check_and_send_cbch_load(bts, bts_ss);</span><br><span style="color: hsl(120, 100%, 40%);">+                rate_ctr_inc2(bts_ss->ctrs, CBCH_CTR_RCVD_QUEUED);</span><br><span>                break;</span><br><span>       case RSL_CB_CMD_TYPE_DEFAULT:</span><br><span>                /* old default msg will be free'd in get_smscb_block() if it is currently in transit</span><br><span>@@ -217,20 +247,25 @@</span><br><span>     if (msg) {</span><br><span>           llist_del(&msg->list);</span><br><span>                bts_ss->queue_len--;</span><br><span style="color: hsl(120, 100%, 40%);">+               check_and_send_cbch_load(bts, bts_ss);</span><br><span>               DEBUGP(DLSMS, "%s: Dequeued msg\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+              rate_ctr_inc2(bts_ss->ctrs, CBCH_CTR_SENT_SINGLE);</span><br><span>                return msg;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* FIXME: send CBCH LOAD Information (underflow) via RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+   /* send CBCH LOAD Information (underflow) via RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+  check_and_send_cbch_load(bts, bts_ss);</span><br><span> </span><br><span>   /* choose the default message, if any */</span><br><span>     msg = bts_ss->default_msg;</span><br><span>        if (msg) {</span><br><span>           DEBUGP(DLSMS, "%s: Using default msg\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc2(bts_ss->ctrs, CBCH_CTR_SENT_DEFAULT);</span><br><span>               return msg;</span><br><span>  }</span><br><span> </span><br><span>        DEBUGP(DLSMS, "%s: No queued msg nor default\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc2(bts_ss->ctrs, CBCH_CTR_SENT_NULL);</span><br><span>  return NULL;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/common/rsl.c b/src/common/rsl.c</span><br><span>index 364e829..af0b72d 100644</span><br><span>--- a/src/common/rsl.c</span><br><span>+++ b/src/common/rsl.c</span><br><span>@@ -1636,6 +1636,32 @@</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* 8.5.8 CBCH Load Information */</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_tx_cbch_load_indication(struct gsm_bts *bts, bool ext_cbch, bool overflow, uint8_t amount)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_lchan *lchan = gsm_bts_get_cbch(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+      struct msgb *msg;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t load_info;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  msg = rsl_msgb_alloc(sizeof(struct abis_rsl_cchan_hdr));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!msg)</span><br><span style="color: hsl(120, 100%, 40%);">+             return -ENOMEM;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 9.3.1 Channel Number */</span><br><span style="color: hsl(120, 100%, 40%);">+    rsl_cch_push_hdr(msg, RSL_MT_CBCH_LOAD_IND, gsm_lchan2chan_nr(lchan));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 9.3.43 CBCH Load Information */</span><br><span style="color: hsl(120, 100%, 40%);">+    load_info = ((overflow & 1) << 7) | (amount & 0x0F);</span><br><span style="color: hsl(120, 100%, 40%);">+    msgb_tv_put(msg, RSL_IE_CBCH_LOAD_INFO, load_info);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* 9.3.44 SMSCB Channel Indicator */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ext_cbch)</span><br><span style="color: hsl(120, 100%, 40%);">+         msgb_tv_put(msg, RSL_IE_SMSCB_CHAN_INDICATOR, 0x01);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        msg->trx = bts->c0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return abis_bts_rsl_sendmsg(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * ip.access related messages</span><br><span>  */</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index fab5516..1d25bfb 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -310,6 +310,9 @@</span><br><span>              vty_out(vty, " pcu-socket %s%s", bts->pcu.sock_path, VTY_NEWLINE);</span><br><span>      if (bts->supp_meas_toa256)</span><br><span>                vty_out(vty, " supp-meas-info toa256%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+      vty_out(vty, " smscb queue-max-length %d%s", bts->smscb_queue_max_len, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     vty_out(vty, " smscb queue-target-length %d%s", bts->smscb_queue_tgt_len, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+  vty_out(vty, " smscb queue-hysteresis %d%s", bts->smscb_queue_hyst, VTY_NEWLINE);</span><br><span> </span><br><span>   bts_model_config_write_bts(vty, bts);</span><br><span> </span><br><span>@@ -687,6 +690,33 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_bts_smscb_max_qlen, cfg_bts_smscb_max_qlen_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "smscb queue-max-length <1-60>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Maximum queue length for SMSCB (CBCH) queue. In count of messages/pages (Default: 15)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->smscb_queue_max_len = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  return CMD_SUCCESS;</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%);">+DEFUN(cfg_bts_smscb_tgt_qlen, cfg_bts_smscb_tgt_qlen_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+   "smscb queue-target-length <1-30>",</span><br><span style="color: hsl(120, 100%, 40%);">+   "Target queue length for SMSCB (CBCH) queue. In count of messages/pages (Default: 2)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->smscb_queue_tgt_len = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  return CMD_SUCCESS;</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%);">+DEFUN(cfg_bts_smscb_qhyst, cfg_bts_smscb_qhyst_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "smscb queue-hysteresis <0-30>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Hysteresis for SMSCB (CBCH) queue. In count of messages/pages (Default: 2)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->smscb_queue_hyst = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> #define DB_DBM_STR                                                      \</span><br><span>    "Unit is dB (decibels)\n"                                     \</span><br><span>@@ -854,6 +884,8 @@</span><br><span>              bts->agch_queue.rejected_msgs, bts->agch_queue.agch_msgs,</span><br><span>              bts->agch_queue.pch_msgs,</span><br><span>                 VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "  CBCH queue target: %d, hysteresis: %d, maximum: %d%s",</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->smscb_queue_tgt_len, bts->smscb_queue_max_len, bts->smscb_queue_hyst, VTY_NEWLINE);</span><br><span>    vty_out(vty, "  CBCH backlog queue length (BASIC): %d%s",</span><br><span>          bts->smscb_basic.queue_len, VTY_NEWLINE);</span><br><span>         vty_out(vty, "  CBCH backlog queue length (EXTENDED): %u%s",</span><br><span>@@ -1614,6 +1646,9 @@</span><br><span>       install_element(BTS_NODE, &cfg_bts_pcu_sock_cmd);</span><br><span>        install_element(BTS_NODE, &cfg_bts_supp_meas_toa256_cmd);</span><br><span>        install_element(BTS_NODE, &cfg_bts_no_supp_meas_toa256_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(BTS_NODE, &cfg_bts_smscb_max_qlen_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(BTS_NODE, &cfg_bts_smscb_tgt_qlen_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(BTS_NODE, &cfg_bts_smscb_qhyst_cmd);</span><br><span> </span><br><span>         install_element(BTS_NODE, &cfg_trx_gsmtap_sapi_cmd);</span><br><span>     install_element(BTS_NODE, &cfg_trx_no_gsmtap_sapi_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14113">change 14113</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/14113"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I7068c7937a60a900c40439115bb84dc3ee0d061f </div>
<div style="display:none"> Gerrit-Change-Number: 14113 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>