<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>