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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">legacy-mgcp: Add jitter buffer on the uplink receiver<br><br>Default usage values are defined in mgcp node, and can be per-BSC<br>overriden on each bsc node<br><br>This commit is a forward-port of openbsc.git Change-Id<br>Ibf3932adc07442fb5e9c7a06404853f9d0a20959.<br><br>Change-Id: Ie19a64ac09f9d51f2434ad0d7925610fc919a90e<br>---<br>M include/osmocom/legacy_mgcp/mgcp.h<br>M include/osmocom/legacy_mgcp/mgcp_internal.h<br>M src/libosmo-legacy-mgcp/mgcp_network.c<br>M src/libosmo-legacy-mgcp/mgcp_protocol.c<br>M src/libosmo-legacy-mgcp/mgcp_vty.c<br>5 files changed, 156 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/legacy_mgcp/mgcp.h b/include/osmocom/legacy_mgcp/mgcp.h</span><br><span>index 147a0d5..7490e37 100644</span><br><span>--- a/include/osmocom/legacy_mgcp/mgcp.h</span><br><span>+++ b/include/osmocom/legacy_mgcp/mgcp.h</span><br><span>@@ -243,6 +243,12 @@</span><br><span>    * message.</span><br><span>   */</span><br><span>  uint16_t osmux_dummy;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Use a jitterbuffer on the bts-side receiver */</span><br><span style="color: hsl(120, 100%, 40%);">+     bool bts_use_jibuf;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Minimum and maximum buffer size for the jitter buffer, in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t bts_jitter_delay_min;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t bts_jitter_delay_max;</span><br><span> };</span><br><span> </span><br><span> /* config management */</span><br><span>diff --git a/include/osmocom/legacy_mgcp/mgcp_internal.h b/include/osmocom/legacy_mgcp/mgcp_internal.h</span><br><span>index dcc75f1..956bee0 100644</span><br><span>--- a/include/osmocom/legacy_mgcp/mgcp_internal.h</span><br><span>+++ b/include/osmocom/legacy_mgcp/mgcp_internal.h</span><br><span>@@ -25,6 +25,7 @@</span><br><span> #include <string.h></span><br><span> </span><br><span> #include <osmocom/core/select.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/netif/jibuf.h></span><br><span> </span><br><span> #define CI_UNUSED 0</span><br><span> </span><br><span>@@ -198,6 +199,14 @@</span><br><span>                    uint32_t octets;</span><br><span>             } stats;</span><br><span>     } osmux;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Jitter buffer */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct osmo_jibuf* bts_jb;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Use a jitterbuffer on the bts-side receiver */</span><br><span style="color: hsl(120, 100%, 40%);">+     bool bts_use_jibuf;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Minimum and maximum buffer size for the jitter buffer, in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t bts_jitter_delay_min;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t bts_jitter_delay_max;</span><br><span> };</span><br><span> </span><br><span> #define for_each_line(line, save)                   \</span><br><span>@@ -335,3 +344,8 @@</span><br><span> }</span><br><span> </span><br><span> int mgcp_msg_terminate_nul(struct msgb *msg);</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%);">+ * Internal jitter buffer related</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_dejitter_udp_send(struct msgb *msg, void *data);</span><br><span>diff --git a/src/libosmo-legacy-mgcp/mgcp_network.c b/src/libosmo-legacy-mgcp/mgcp_network.c</span><br><span>index 8ccfb42..7b161d2 100644</span><br><span>--- a/src/libosmo-legacy-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-legacy-mgcp/mgcp_network.c</span><br><span>@@ -584,6 +584,36 @@</span><br><span>     return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_dejitter_udp_send(struct msgb *msg, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct mgcp_rtp_end *rtp_end = (struct mgcp_rtp_end *) data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        int rc = mgcp_udp_send(rtp_end->rtp.fd, &rtp_end->addr,</span><br><span style="color: hsl(120, 100%, 40%);">+                        rtp_end->rtp_port, (char*) msg->data, msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (rc != msg->len)</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                      "Failed to send data after jitter buffer: %d\n", rc);</span><br><span style="color: hsl(120, 100%, 40%);">+       msgb_free(msg);</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%);">+static int enqueue_dejitter(struct osmo_jibuf *jb, struct mgcp_rtp_end *rtp_end, char *buf, int len)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *msg;</span><br><span style="color: hsl(120, 100%, 40%);">+     msg = msgb_alloc(len, "mgcp-jibuf");</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!msg)</span><br><span style="color: hsl(120, 100%, 40%);">+             return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  memcpy(msg->data, buf, len);</span><br><span style="color: hsl(120, 100%, 40%);">+       msgb_put(msg, len);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (osmo_jibuf_enqueue(jb, msg) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             rtp_end->dropped_packets += 1;</span><br><span style="color: hsl(120, 100%, 40%);">+             msgb_free(msg);</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%);">+   return len;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int mgcp_send(struct mgcp_endpoint *endp, int dest, int is_rtp,</span><br><span>        struct sockaddr_in *addr, char *buf, int rc)</span><br><span> {</span><br><span>@@ -591,6 +621,7 @@</span><br><span>        struct mgcp_rtp_end *rtp_end;</span><br><span>        struct mgcp_rtp_state *rtp_state;</span><br><span>    int tap_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct osmo_jibuf *jb;</span><br><span> </span><br><span>   LOGP(DLMGCP, LOGL_DEBUG,</span><br><span>          "endpoint %x dest %s tcfg->audio_loop %d endp->conn_mode %d (== loopback: %d)\n",</span><br><span>@@ -612,10 +643,12 @@</span><br><span>               rtp_end = &endp->net_end;</span><br><span>             rtp_state = &endp->bts_state;</span><br><span>                 tap_idx = MGCP_TAP_NET_OUT;</span><br><span style="color: hsl(120, 100%, 40%);">+           jb = endp->bts_jb;</span><br><span>        } else {</span><br><span>             rtp_end = &endp->bts_end;</span><br><span>             rtp_state = &endp->net_state;</span><br><span>                 tap_idx = MGCP_TAP_BTS_OUT;</span><br><span style="color: hsl(120, 100%, 40%);">+           jb = NULL;</span><br><span>   }</span><br><span>    LOGP(DLMGCP, LOGL_DEBUG,</span><br><span>          "endpoint %x dest %s net_end %s %d %d bts_end %s %d %d rtp_end %s %d %d\n",</span><br><span>@@ -680,9 +713,12 @@</span><br><span>                            rtp_state->patched_first_rtp_payload = true;</span><br><span>                      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   rc = mgcp_udp_send(rtp_end->rtp.fd,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     &rtp_end->addr,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          rtp_end->rtp_port, buf, len);</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (jb)</span><br><span style="color: hsl(120, 100%, 40%);">+                               rc = enqueue_dejitter(jb, rtp_end, buf, len);</span><br><span style="color: hsl(120, 100%, 40%);">+                 else</span><br><span style="color: hsl(120, 100%, 40%);">+                          rc = mgcp_udp_send(rtp_end->rtp.fd,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   &rtp_end->addr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                rtp_end->rtp_port, buf, len);</span><br><span> </span><br><span>                      if (rc <= 0)</span><br><span>                              return rc;</span><br><span>diff --git a/src/libosmo-legacy-mgcp/mgcp_protocol.c b/src/libosmo-legacy-mgcp/mgcp_protocol.c</span><br><span>index 4e82233..854b4ba 100644</span><br><span>--- a/src/libosmo-legacy-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-legacy-mgcp/mgcp_protocol.c</span><br><span>@@ -863,6 +863,11 @@</span><br><span>           goto error2;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Apply Jiter buffer settings for this endpoint, they can be overriden by CRCX policy later */</span><br><span style="color: hsl(120, 100%, 40%);">+       endp->bts_use_jibuf = endp->cfg->bts_use_jibuf;</span><br><span style="color: hsl(120, 100%, 40%);">+      endp->bts_jitter_delay_min = endp->cfg->bts_jitter_delay_min;</span><br><span style="color: hsl(120, 100%, 40%);">+        endp->bts_jitter_delay_max = endp->cfg->bts_jitter_delay_max;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     endp->allocated = 1;</span><br><span> </span><br><span>  /* set up RTP media parameters */</span><br><span>@@ -898,6 +903,13 @@</span><br><span>             case MGCP_POLICY_DEFER:</span><br><span>                      /* stop processing */</span><br><span>                        create_transcoder(endp);</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* Set up jitter buffer if required after policy has updated jibuf endp values */</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (endp->bts_use_jibuf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         endp->bts_jb = osmo_jibuf_alloc(tcfg->endpoints);</span><br><span style="color: hsl(120, 100%, 40%);">+                               osmo_jibuf_set_min_delay(endp->bts_jb, endp->bts_jitter_delay_min);</span><br><span style="color: hsl(120, 100%, 40%);">+                             osmo_jibuf_set_max_delay(endp->bts_jb, endp->bts_jitter_delay_max);</span><br><span style="color: hsl(120, 100%, 40%);">+                             osmo_jibuf_set_dequeue_cb(endp->bts_jb, mgcp_dejitter_udp_send, &endp->net_end);</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span>                    return NULL;</span><br><span>                         break;</span><br><span>               case MGCP_POLICY_CONT:</span><br><span>@@ -906,6 +918,14 @@</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Set up jitter buffer if required after policy has updated jibuf endp values */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (endp->bts_use_jibuf) {</span><br><span style="color: hsl(120, 100%, 40%);">+         endp->bts_jb = osmo_jibuf_alloc(tcfg->endpoints);</span><br><span style="color: hsl(120, 100%, 40%);">+               osmo_jibuf_set_min_delay(endp->bts_jb, endp->bts_jitter_delay_min);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_jibuf_set_max_delay(endp->bts_jb, endp->bts_jitter_delay_max);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_jibuf_set_dequeue_cb(endp->bts_jb, mgcp_dejitter_udp_send, &endp->net_end);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  LOGP(DLMGCP, LOGL_DEBUG, "Creating endpoint on: 0x%x CI: %u port: %u/%u\n",</span><br><span>                ENDPOINT_NUMBER(endp), endp->ci,</span><br><span>          endp->net_end.local_port, endp->bts_end.local_port);</span><br><span>@@ -1373,6 +1393,9 @@</span><br><span> void mgcp_release_endp(struct mgcp_endpoint *endp)</span><br><span> {</span><br><span>        LOGP(DLMGCP, LOGL_DEBUG, "Releasing endpoint on: 0x%x\n", ENDPOINT_NUMBER(endp));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (endp->bts_jb)</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_jibuf_delete(endp->bts_jb);</span><br><span style="color: hsl(120, 100%, 40%);">+   endp->bts_jb = NULL;</span><br><span>      endp->ci = CI_UNUSED;</span><br><span>     endp->allocated = 0;</span><br><span> </span><br><span>diff --git a/src/libosmo-legacy-mgcp/mgcp_vty.c b/src/libosmo-legacy-mgcp/mgcp_vty.c</span><br><span>index 7b11422..be884cb 100644</span><br><span>--- a/src/libosmo-legacy-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-legacy-mgcp/mgcp_vty.c</span><br><span>@@ -29,6 +29,7 @@</span><br><span> #include <osmocom/legacy_mgcp/vty.h></span><br><span> </span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span> </span><br><span> #define RTCP_OMIT_STR "Drop RTCP packets in both directions\n"</span><br><span> #define RTP_PATCH_STR "Modify RTP packet header in both directions\n"</span><br><span>@@ -164,6 +165,13 @@</span><br><span>           vty_out(vty, "  osmux dummy %s%s",</span><br><span>                         g_cfg->osmux_dummy ? "on" : "off", VTY_NEWLINE);</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (g_cfg->bts_use_jibuf)</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, "  bts-jitter-buffer%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (g_cfg->bts_jitter_delay_min)</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "  bts-jitter-delay-min %"PRIu32"%s", g_cfg->bts_jitter_delay_min, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (g_cfg->bts_jitter_delay_max)</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "  bts-jitter-delay-max %"PRIu32"%s", g_cfg->bts_jitter_delay_max, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -241,6 +249,11 @@</span><br><span> </span><br><span>      if (g_cfg->osmux)</span><br><span>                 vty_out(vty, "Osmux used CID: %d%s", osmux_used_cid(), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+        vty_out(vty, "Jitter Buffer by default on Uplink : %s%s",</span><br><span style="color: hsl(120, 100%, 40%);">+           g_cfg->bts_use_jibuf ? "on" : "off", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (g_cfg->bts_use_jibuf)</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, "Jitter Buffer delays: min=%"PRIu32" max=%"PRIu32"%s",</span><br><span style="color: hsl(120, 100%, 40%);">+             g_cfg->bts_jitter_delay_min, g_cfg->bts_jitter_delay_max, VTY_NEWLINE);</span><br><span> </span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -1344,6 +1357,63 @@</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define DEJITTER_STR "Uplink Jitter Buffer"</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_mgcp_bts_use_jibuf,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_mgcp_bts_use_jibuf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bts-jitter-buffer",</span><br><span style="color: hsl(120, 100%, 40%);">+      DEJITTER_STR "\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    g_cfg->bts_use_jibuf = true;</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_mgcp_no_bts_use_jibuf,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_mgcp_no_bts_use_jibuf_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no bts-jitter-buffer",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR DEJITTER_STR "\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       g_cfg->bts_use_jibuf = false;</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_mgcp_bts_jitter_delay_min,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_mgcp_bts_jitter_delay_min_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bts-jitter-buffer-delay-min <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+      DEJITTER_STR " Minimum Delay in ms\n" "Minimum Delay in ms\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ g_cfg->bts_jitter_delay_min = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!g_cfg->bts_jitter_delay_min) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty, "bts-jitter-buffer-delay-min cannot be zero.%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (g_cfg->bts_jitter_delay_min && g_cfg->bts_jitter_delay_max &&</span><br><span style="color: hsl(120, 100%, 40%);">+           g_cfg->bts_jitter_delay_min > g_cfg->bts_jitter_delay_max) {</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "bts-jitter-buffer-delay-min cannot be bigger than " \</span><br><span style="color: hsl(120, 100%, 40%);">+                 "bts-jitter-buffer-delay-max.%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</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_mgcp_bts_jitter_delay_max,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_mgcp_bts_jitter_delay_max_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bts-jitter-buffer-delay-max <1-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+      DEJITTER_STR " Maximum Delay in ms\n" "Maximum Delay in ms\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ g_cfg->bts_jitter_delay_max = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!g_cfg->bts_jitter_delay_max) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty, "bts-jitter-buffer-delay-max cannot be zero.%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (g_cfg->bts_jitter_delay_min && g_cfg->bts_jitter_delay_max &&</span><br><span style="color: hsl(120, 100%, 40%);">+           g_cfg->bts_jitter_delay_min > g_cfg->bts_jitter_delay_max) {</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "bts-jitter-buffer-delay-max cannot be smaller than " \</span><br><span style="color: hsl(120, 100%, 40%);">+                        "bts-jitter-buffer-delay-min.%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</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> int mgcp_vty_init(void)</span><br><span> {</span><br><span>     install_element_ve(&show_mgcp_cmd);</span><br><span>@@ -1411,6 +1481,10 @@</span><br><span>     install_element(MGCP_NODE, &cfg_mgcp_osmux_dummy_cmd);</span><br><span>   install_element(MGCP_NODE, &cfg_mgcp_allow_transcoding_cmd);</span><br><span>     install_element(MGCP_NODE, &cfg_mgcp_no_allow_transcoding_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(MGCP_NODE, &cfg_mgcp_bts_use_jibuf_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+  install_element(MGCP_NODE, &cfg_mgcp_no_bts_use_jibuf_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       install_element(MGCP_NODE, &cfg_mgcp_bts_jitter_delay_min_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(MGCP_NODE, &cfg_mgcp_bts_jitter_delay_max_cmd);</span><br><span> </span><br><span> </span><br><span>  install_element(MGCP_NODE, &cfg_mgcp_trunk_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9212">change 9212</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/9212"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ie19a64ac09f9d51f2434ad0d7925610fc919a90e </div>
<div style="display:none"> Gerrit-Change-Number: 9212 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>