<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/mncc-python/+/17979">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">rtpsource: CTRL call rtp_create: add codec arg<br><br>Instead of hardcoding FR in rtpsource, add an argument to set the codec<br>from mncc_mt_loadgen.py via CTRL call rtp_create. Hardcode FR in<br>mncc_mt_loadgen.py for now, a follow up patch will make it configurable<br>there, too.<br><br>Related: SYS#4924<br>Change-Id: If75e902b451d7e202a03e93afcd55bd24f517813<br>---<br>M mncc_mt_loadgen.py<br>M rtpsource/ctrl_if.c<br>M rtpsource/internal.h<br>M rtpsource/rtpsource.c<br>4 files changed, 39 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/mncc-python refs/changes/79/17979/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/mncc_mt_loadgen.py b/mncc_mt_loadgen.py</span><br><span>index 021d619..fcae13f 100755</span><br><span>--- a/mncc_mt_loadgen.py</span><br><span>+++ b/mncc_mt_loadgen.py</span><br><span>@@ -80,7 +80,8 @@</span><br><span> </span><br><span>     def on_receive(self, message):</span><br><span>         if message['type'] == 'rtp_create':</span><br><span style="color: hsl(0, 100%, 40%);">-            (res, var, val) = self._set_var('rtp_create', message['cname'])</span><br><span style="color: hsl(120, 100%, 40%);">+            val = '%s,%u' % (message['cname'], message['codec'])</span><br><span style="color: hsl(120, 100%, 40%);">+            (res, var, val) = self._set_var('rtp_create', val)</span><br><span>             v = val.split(',') # input looks like '1,127.23.23.23,37723'</span><br><span>             return {'cname': v[0], 'remote_host': v[1], 'remote_port': int(v[2])}</span><br><span>         elif message['type'] == 'rtp_connect':</span><br><span>@@ -113,7 +114,8 @@</span><br><span>         self.msisdn_called = msisdn_called</span><br><span>         self.msisdn_calling = msisdn_calling</span><br><span>         # allocate a RTP connection @ rtpsource</span><br><span style="color: hsl(0, 100%, 40%);">-        r = self.ctrl_act.ask({'type':'rtp_create', 'cname':self.callref})</span><br><span style="color: hsl(120, 100%, 40%);">+        codec = 2 # FR, FIXME: make configurable</span><br><span style="color: hsl(120, 100%, 40%);">+        r = self.ctrl_act.ask({'type':'rtp_create', 'cname':self.callref, 'codec':codec})</span><br><span>         self.ext_rtp_host = r['remote_host']</span><br><span>         self.ext_rtp_port = r['remote_port']</span><br><span>         # start the MNCC call FSM</span><br><span>diff --git a/rtpsource/ctrl_if.c b/rtpsource/ctrl_if.c</span><br><span>index 708fb02..520ff4a 100644</span><br><span>--- a/rtpsource/ctrl_if.c</span><br><span>+++ b/rtpsource/ctrl_if.c</span><br><span>@@ -21,27 +21,52 @@</span><br><span> #include <osmocom/ctrl/control_cmd.h></span><br><span> </span><br><span> #include "internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "rtp_provider.h"</span><br><span> </span><br><span> CTRL_CMD_DEFINE_WO_NOVRF(rtp_create, "rtp_create");</span><br><span> static int set_rtp_create(struct ctrl_cmd *cmd, void *data)</span><br><span> {</span><br><span>  struct rtp_connection *conn;</span><br><span style="color: hsl(0, 100%, 40%);">-    const char *cname = cmd->value;</span><br><span style="color: hsl(120, 100%, 40%);">+    const char *cname, *codec_str;</span><br><span style="color: hsl(120, 100%, 40%);">+        char *tmp, *saveptr;</span><br><span style="color: hsl(120, 100%, 40%);">+  enum codec_type codec;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      tmp = talloc_strdup(cmd, cmd->value);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   cname = strtok_r(tmp, ",", &saveptr);</span><br><span style="color: hsl(120, 100%, 40%);">+   codec_str = strtok_r(NULL, ",", &saveptr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!cname || !codec_str) {</span><br><span style="color: hsl(120, 100%, 40%);">+           cmd->reply = "Format is cname,codec";</span><br><span style="color: hsl(120, 100%, 40%);">+            goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        if (find_connection_by_cname(g_rss, cname)) {</span><br><span>                cmd->reply = "Connection already exists for cname";</span><br><span style="color: hsl(0, 100%, 40%);">-                return CTRL_CMD_ERROR;</span><br><span style="color: hsl(120, 100%, 40%);">+                goto error;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   conn = create_connection(g_rss, cname);</span><br><span style="color: hsl(120, 100%, 40%);">+       codec = atoi(codec_str);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (codec < 0 || codec >= _NUM_CODECS) {</span><br><span style="color: hsl(120, 100%, 40%);">+                cmd->reply = "Invalid codec";</span><br><span style="color: hsl(120, 100%, 40%);">+            goto error;</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%);">+   conn = create_connection(g_rss, cname, codec);</span><br><span>       if (!conn) {</span><br><span>                 cmd->reply = "Error creating RTP connection";</span><br><span style="color: hsl(0, 100%, 40%);">-              return CTRL_CMD_ERROR;</span><br><span style="color: hsl(120, 100%, 40%);">+                goto error;</span><br><span>  }</span><br><span> </span><br><span>        /* Respond */</span><br><span>        cmd->reply = talloc_asprintf(cmd, "%s,%s,%d", conn->cname, conn->local_host, conn->local_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(tmp);</span><br><span>    return CTRL_CMD_REPLY;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+error:</span><br><span style="color: hsl(120, 100%, 40%);">+      talloc_free(tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+     return CTRL_CMD_ERROR;</span><br><span> }</span><br><span> </span><br><span> CTRL_CMD_DEFINE_WO_NOVRF(rtp_connect, "rtp_connect");</span><br><span>diff --git a/rtpsource/internal.h b/rtpsource/internal.h</span><br><span>index a4501a2..35f12d0 100644</span><br><span>--- a/rtpsource/internal.h</span><br><span>+++ b/rtpsource/internal.h</span><br><span>@@ -4,6 +4,8 @@</span><br><span> #include <osmocom/trau/osmo_ortp.h></span><br><span> #include <osmocom/ctrl/control_if.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum codec_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> enum {</span><br><span>       DMAIN,</span><br><span> };</span><br><span>@@ -36,7 +38,7 @@</span><br><span> </span><br><span> struct rtp_connection *find_connection_by_cname(struct rtpsource_state *rss, const char *cname);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct rtp_connection *create_connection(struct rtpsource_state *rss, const char *cname);</span><br><span style="color: hsl(120, 100%, 40%);">+struct rtp_connection *create_connection(struct rtpsource_state *rss, const char *cname, enum codec_type codec);</span><br><span> </span><br><span> int connect_connection(struct rtp_connection *conn, const char *remote_host,</span><br><span>                  uint16_t remote_port, uint8_t pt);</span><br><span>diff --git a/rtpsource/rtpsource.c b/rtpsource/rtpsource.c</span><br><span>index 3087262..4af8899 100644</span><br><span>--- a/rtpsource/rtpsource.c</span><br><span>+++ b/rtpsource/rtpsource.c</span><br><span>@@ -63,11 +63,10 @@</span><br><span> }</span><br><span> </span><br><span> /* create a new RTP connection for given CNAME; includes binding of local RTP port */</span><br><span style="color: hsl(0, 100%, 40%);">-struct rtp_connection *create_connection(struct rtpsource_state *rss, const char *cname)</span><br><span style="color: hsl(120, 100%, 40%);">+struct rtp_connection *create_connection(struct rtpsource_state *rss, const char *cname, enum codec_type codec)</span><br><span> {</span><br><span>    const struct rtp_provider *rtp_prov;</span><br><span>         struct rtp_connection *conn;</span><br><span style="color: hsl(0, 100%, 40%);">-    enum codec_type codec = CODEC_GSM_FR; // TODO: configurable</span><br><span>  const char *host;</span><br><span>    int port;</span><br><span>    int rc;</span><br><span>@@ -101,8 +100,8 @@</span><br><span> </span><br><span>    llist_add_tail(&conn->list, &rss->connections);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       CLOGP(conn, DMAIN, LOGL_INFO, "Created RTP connection; local=%s:%u\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                conn->local_host, conn->local_port);</span><br><span style="color: hsl(120, 100%, 40%);">+    CLOGP(conn, DMAIN, LOGL_INFO, "Created RTP connection; local=%s:%u; codec=%u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+            conn->local_host, conn->local_port, codec);</span><br><span> </span><br><span> </span><br><span>    return conn;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/mncc-python/+/17979">change 17979</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/mncc-python/+/17979"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: mncc-python </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If75e902b451d7e202a03e93afcd55bd24f517813 </div>
<div style="display:none"> Gerrit-Change-Number: 17979 </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>