<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/18590">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trunk: get rid of virt_trunk pointer<br><br>The virtual trunk is a pre-configured trunk that always exists. It is<br>kept separate from the trunk list using a separate pointer. This makes<br>thinks unecessarly complicated. Lets organize the trunk in the trunk<br>list like any other trunk, except that we automatically create it on<br>startup and assign it always the trunk id number 0.<br><br>Change-Id: I81934fbd211b225ab7920e78510729c8e22607b3<br>Related: OS#2659<br>---<br>M include/osmocom/mgcp/mgcp.h<br>M include/osmocom/mgcp/mgcp_trunk.h<br>M src/libosmo-mgcp/mgcp_endp.c<br>M src/libosmo-mgcp/mgcp_osmux.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>M src/libosmo-mgcp/mgcp_trunk.c<br>M src/libosmo-mgcp/mgcp_vty.c<br>M tests/mgcp/mgcp_test.c<br>8 files changed, 158 insertions(+), 122 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/90/18590/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp.h b/include/osmocom/mgcp/mgcp.h</span><br><span>index 4c122e7..47c741f 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp.h</span><br><span>@@ -211,11 +211,7 @@</span><br><span> </span><br><span> uint32_t last_call_id;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* trunk handling */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* virtual trunk for RTP - RTP endpoints */</span><br><span style="color: hsl(0, 100%, 40%);">- struct mgcp_trunk *virt_trunk;</span><br><span style="color: hsl(0, 100%, 40%);">- /* physical trunks with underlying E1 endpoints */</span><br><span style="color: hsl(120, 100%, 40%);">+ /* list holding the trunks */</span><br><span> struct llist_head trunks;</span><br><span> </span><br><span> enum mgcp_role role;</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_trunk.h b/include/osmocom/mgcp/mgcp_trunk.h</span><br><span>index 51e9fb5..60fb840 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_trunk.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_trunk.h</span><br><span>@@ -38,7 +38,12 @@</span><br><span> struct mgcp_endpoint **endpoints;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_trunk *mgcp_trunk_alloc(struct mgcp_config *cfg, enum mgcp_trunk_type ttype, int nr);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_trunk_alloc(struct mgcp_config *cfg, enum mgcp_trunk_type ttype, int nr);</span><br><span> int mgcp_trunk_alloc_endpts(struct mgcp_trunk *tcfg);</span><br><span> struct mgcp_trunk *mgcp_trunk_by_num(struct mgcp_config *cfg, int index);</span><br><span> struct mgcp_trunk *mgcp_trunk_by_name(const char *epname, struct mgcp_config *cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* The virtual trunk is always created on trunk id 0 for historical reasons,</span><br><span style="color: hsl(120, 100%, 40%);">+ * use this define constant as ID when allocating a virtual trunk. Other</span><br><span style="color: hsl(120, 100%, 40%);">+ * trunks may be assigned with arbritrary id numbers */</span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_VIRT_TRUNK_ID 0</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c</span><br><span>index 5e42bcb..69e44e5 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_endp.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_endp.c</span><br><span>@@ -97,16 +97,12 @@</span><br><span> switch (trunk->trunk_type) {</span><br><span> case MGCP_TRUNK_VIRTUAL:</span><br><span> prefix_len = sizeof(MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(epname) <= prefix_len)</span><br><span style="color: hsl(0, 100%, 40%);">- return epname;</span><br><span> if (strncmp</span><br><span> (epname, MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK,</span><br><span> prefix_len) == 0)</span><br><span> return epname + prefix_len;</span><br><span> case MGCP_TRUNK_E1:</span><br><span> prefix_len = sizeof(MGCP_ENDPOINT_PREFIX_E1_TRUNK) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(epname) <= prefix_len)</span><br><span style="color: hsl(0, 100%, 40%);">- return epname;</span><br><span> if (strncmp</span><br><span> (epname, MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK,</span><br><span> prefix_len) == 0)</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>index ca8b5f0..ba8e10f 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>@@ -198,14 +198,15 @@</span><br><span> osmux_conn_lookup(struct mgcp_config *cfg, uint8_t cid,</span><br><span> struct in_addr *from_addr)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(cfg, 0);</span><br><span> struct mgcp_endpoint *endp;</span><br><span> struct mgcp_conn *conn = NULL;</span><br><span> struct mgcp_conn_rtp * conn_rtp;</span><br><span> int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- for (i=0; i<cfg->virt_trunk->number_endpoints; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i=0; i<trunk->number_endpoints; i++) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[i];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[i];</span><br><span> </span><br><span> llist_for_each_entry(conn, &endp->conns, entry) {</span><br><span> if (conn->type != MGCP_CONN_TYPE_RTP)</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index f62b581..13cf3b1 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -1501,16 +1501,14 @@</span><br><span> </span><br><span> cfg->get_net_downlink_format_cb = &mgcp_get_net_downlink_format_default;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ INIT_LLIST_HEAD(&cfg->trunks);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Allocate virtual trunk */</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk = mgcp_trunk_alloc(cfg, MGCP_TRUNK_VIRTUAL, 0);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!cfg->virt_trunk) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mgcp_trunk_alloc(cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID) != 0) {</span><br><span> talloc_free(cfg);</span><br><span> return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initalize list head for user configurable trunks */</span><br><span style="color: hsl(0, 100%, 40%);">- INIT_LLIST_HEAD(&cfg->trunks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> mgcp_ratectr_alloc(cfg, &cfg->ratectr);</span><br><span> </span><br><span> return cfg;</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_trunk.c b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>index 4424874..04789b8 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>@@ -30,15 +30,15 @@</span><br><span> * \param[in] cfg mgcp configuration</span><br><span> * \param[in] nr trunk number</span><br><span> * \param[in] ttype trunk type</span><br><span style="color: hsl(0, 100%, 40%);">- * \returns pointer to allocated trunk, NULL on failure */</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_trunk *mgcp_trunk_alloc(struct mgcp_config *cfg, enum mgcp_trunk_type ttype, int nr)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \returns -EINVAL on failure, 0 on success. */</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_trunk_alloc(struct mgcp_config *cfg, enum mgcp_trunk_type ttype, int nr)</span><br><span> {</span><br><span> struct mgcp_trunk *trunk;</span><br><span> </span><br><span> trunk = talloc_zero(cfg, struct mgcp_trunk);</span><br><span> if (!trunk) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGP(DLMGCP, LOGL_ERROR, "Failed to allocate.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLMGCP, LOGL_ERROR, "Failed to allocate trunk.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return -EINVAL;</span><br><span> }</span><br><span> </span><br><span> trunk->cfg = cfg;</span><br><span>@@ -52,13 +52,8 @@</span><br><span> </span><br><span> mgcp_trunk_set_keepalive(trunk, MGCP_KEEPALIVE_ONCE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Note: Trunk Nr.0 is reserved as "virtual trunk",</span><br><span style="color: hsl(0, 100%, 40%);">- * it is not stored using a separate pointer and</span><br><span style="color: hsl(0, 100%, 40%);">- * not in the trunk list. */</span><br><span style="color: hsl(0, 100%, 40%);">- if (nr > 0)</span><br><span style="color: hsl(0, 100%, 40%);">- llist_add_tail(&trunk->entry, &cfg->trunks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return trunk;</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_add_tail(&trunk->entry, &cfg->trunks);</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span> }</span><br><span> </span><br><span> /*! allocate endpoints and set default values.</span><br><span>@@ -140,7 +135,7 @@</span><br><span> </span><br><span> prefix_len = sizeof(MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK) - 1;</span><br><span> if (strncmp(epname, MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK, prefix_len) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- return cfg->virt_trunk;</span><br><span style="color: hsl(120, 100%, 40%);">+ return mgcp_trunk_by_num(cfg, 0);</span><br><span> }</span><br><span> </span><br><span> /* E1 trunks are not implemented yet, so we deny any request for an</span><br><span>@@ -163,7 +158,7 @@</span><br><span> if ((epname[0] >= '0' && epname[0] <= '9') || (epname[0] >= 'a' && epname[0] <= 'f')) {</span><br><span> LOGP(DLMGCP, LOGL_ERROR, "missing trunk prefix in endpoint name \"%s\", assuming trunk \"%s\"!\n", epname,</span><br><span> MGCP_ENDPOINT_PREFIX_VIRTUAL_TRUNK);</span><br><span style="color: hsl(0, 100%, 40%);">- return cfg->virt_trunk;</span><br><span style="color: hsl(120, 100%, 40%);">+ return mgcp_trunk_by_num(cfg, 0);</span><br><span> }</span><br><span> </span><br><span> LOGP(DLMGCP, LOGL_ERROR, "unable to find trunk for endpoint name \"%s\"!\n", epname);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>index d0bb602..71e5ead 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>@@ -43,18 +43,6 @@</span><br><span> </span><br><span> static struct mgcp_config *g_cfg = NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct mgcp_trunk *find_trunk(struct mgcp_config *cfg, int nr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct mgcp_trunk *trunk;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (nr == 0)</span><br><span style="color: hsl(0, 100%, 40%);">- trunk = cfg->virt_trunk;</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">- trunk = mgcp_trunk_by_num(cfg, nr);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return trunk;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct cmd_node mgcp_node = {</span><br><span> MGCP_NODE,</span><br><span> "%s(config-mgcp)# ",</span><br><span>@@ -69,7 +57,7 @@</span><br><span> </span><br><span> static int config_write_mgcp(struct vty *vty)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- struct mgcp_trunk *trunk = g_cfg->virt_trunk;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> </span><br><span> vty_out(vty, "mgcp%s", VTY_NEWLINE);</span><br><span> vty_out(vty, " domain %s%s", g_cfg->domain, VTY_NEWLINE);</span><br><span>@@ -317,8 +305,6 @@</span><br><span> struct mgcp_trunk *trunk;</span><br><span> int show_stats = argc >= 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- dump_trunk(vty, g_cfg->virt_trunk, show_stats);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> llist_for_each_entry(trunk, &g_cfg->trunks, entry)</span><br><span> dump_trunk(vty, trunk, show_stats);</span><br><span> </span><br><span>@@ -377,7 +363,7 @@</span><br><span> struct mgcp_trunk *trunk;</span><br><span> int trunkidx = atoi(argv[0]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk = find_trunk(g_cfg, trunkidx);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(g_cfg, trunkidx);</span><br><span> if (!trunk) {</span><br><span> vty_out(vty, "trunk %d not found%s", trunkidx, VTY_NEWLINE);</span><br><span> return CMD_WARNING;</span><br><span>@@ -567,11 +553,13 @@</span><br><span> "Add extra fmtp for the SDP file\n" "Audio\n" "Fmtp-extra\n"</span><br><span> "Extra Information\n")</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> char *txt = argv_concat(argv, argc, 0);</span><br><span> if (!txt)</span><br><span> return CMD_WARNING;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- osmo_talloc_replace_string(g_cfg, &g_cfg->virt_trunk->audio_fmtp_extra, txt);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_talloc_replace_string(g_cfg, &trunk->audio_fmtp_extra, txt);</span><br><span> talloc_free(txt);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -580,7 +568,9 @@</span><br><span> cfg_mgcp_allow_transcoding_cmd,</span><br><span> "allow-transcoding", "Allow transcoding\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->no_audio_transcoding = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->no_audio_transcoding = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -588,7 +578,9 @@</span><br><span> cfg_mgcp_no_allow_transcoding_cmd,</span><br><span> "no allow-transcoding", NO_STR "Allow transcoding\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->no_audio_transcoding = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->no_audio_transcoding = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -624,7 +616,9 @@</span><br><span> "sdp audio-payload send-ptime",</span><br><span> SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->audio_send_ptime = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_send_ptime = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -633,7 +627,9 @@</span><br><span> "no sdp audio-payload send-ptime",</span><br><span> NO_STR SDP_STR AUDIO_STR "Send SDP ptime (packet duration) attribute\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->audio_send_ptime = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_send_ptime = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -642,7 +638,9 @@</span><br><span> "sdp audio-payload send-name",</span><br><span> SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->audio_send_name = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_send_name = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -651,7 +649,9 @@</span><br><span> "no sdp audio-payload send-name",</span><br><span> NO_STR SDP_STR AUDIO_STR "Send SDP rtpmap with the audio name\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->audio_send_name = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_send_name = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -660,11 +660,13 @@</span><br><span> "loop (0|1)",</span><br><span> "Loop audio for all endpoints on main trunk\n" "Don't Loop\n" "Loop\n")</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> if (g_cfg->osmux) {</span><br><span> vty_out(vty, "Cannot use `loop' with `osmux'.%s", VTY_NEWLINE);</span><br><span> return CMD_WARNING;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->audio_loop = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_loop = atoi(argv[0]);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -674,7 +676,9 @@</span><br><span> "Force endpoint reallocation when the endpoint is still seized\n"</span><br><span> "Don't force reallocation\n" "force reallocation\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_realloc = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_realloc = atoi(argv[0]);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -684,7 +688,9 @@</span><br><span> "Accept all RTP packets, even when the originating IP/Port does not match\n"</span><br><span> "enable filter\n" "disable filter\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->rtp_accept_all = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->rtp_accept_all = atoi(argv[0]);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -693,21 +699,27 @@</span><br><span> "number endpoints <0-65534>",</span><br><span> "Number options\n" "Endpoints available\n" "Number endpoints\n")</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> /* + 1 as we start counting at one */</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->vty_number_endpoints = atoi(argv[0]) + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = atoi(argv[0]) + 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_mgcp_omit_rtcp, cfg_mgcp_omit_rtcp_cmd, "rtcp-omit", RTCP_OMIT_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->omit_rtcp = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->omit_rtcp = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_mgcp_no_omit_rtcp,</span><br><span> cfg_mgcp_no_omit_rtcp_cmd, "no rtcp-omit", NO_STR RTCP_OMIT_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->omit_rtcp = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->omit_rtcp = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -715,7 +727,9 @@</span><br><span> cfg_mgcp_patch_rtp_ssrc_cmd,</span><br><span> "rtp-patch ssrc", RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_constant_ssrc = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_constant_ssrc = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -723,7 +737,9 @@</span><br><span> cfg_mgcp_no_patch_rtp_ssrc_cmd,</span><br><span> "no rtp-patch ssrc", NO_STR RTP_PATCH_STR "Force a fixed SSRC\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_constant_ssrc = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_constant_ssrc = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -731,7 +747,9 @@</span><br><span> cfg_mgcp_patch_rtp_ts_cmd,</span><br><span> "rtp-patch timestamp", RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_aligned_timing = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_aligned_timing = 1;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -739,7 +757,9 @@</span><br><span> cfg_mgcp_no_patch_rtp_ts_cmd,</span><br><span> "no rtp-patch timestamp", NO_STR RTP_PATCH_STR "Adjust RTP timestamp\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_aligned_timing = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_aligned_timing = 0;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -747,7 +767,9 @@</span><br><span> cfg_mgcp_patch_rtp_rfc5993hr_cmd,</span><br><span> "rtp-patch rfc5993hr", RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->rfc5993_hr_convert = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->rfc5993_hr_convert = true;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -755,16 +777,20 @@</span><br><span> cfg_mgcp_no_patch_rtp_rfc5993hr_cmd,</span><br><span> "no rtp-patch rfc5993hr", NO_STR RTP_PATCH_STR RTP_TS101318_RFC5993_CONV_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->rfc5993_hr_convert = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->rfc5993_hr_convert = false;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_mgcp_no_patch_rtp,</span><br><span> cfg_mgcp_no_patch_rtp_cmd, "no rtp-patch", NO_STR RTP_PATCH_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_constant_ssrc = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->force_aligned_timing = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->rfc5993_hr_convert = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_constant_ssrc = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->force_aligned_timing = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->rfc5993_hr_convert = false;</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -773,7 +799,9 @@</span><br><span> "rtp keep-alive <1-120>",</span><br><span> RTP_STR RTP_KEEPALIVE_STR "Keep alive interval in secs\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_set_keepalive(g_cfg->virt_trunk, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_set_keepalive(trunk, atoi(argv[0]));</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -782,7 +810,9 @@</span><br><span> "rtp keep-alive once",</span><br><span> RTP_STR RTP_KEEPALIVE_STR "Send dummy packet only once after CRCX/MDCX\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_set_keepalive(g_cfg->virt_trunk, MGCP_KEEPALIVE_ONCE);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_set_keepalive(trunk, MGCP_KEEPALIVE_ONCE);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -790,7 +820,9 @@</span><br><span> cfg_mgcp_no_rtp_keepalive_cmd,</span><br><span> "no rtp keep-alive", NO_STR RTP_STR RTP_KEEPALIVE_STR)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_set_keepalive(g_cfg->virt_trunk, MGCP_KEEPALIVE_NEVER);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_set_keepalive(trunk, MGCP_KEEPALIVE_NEVER);</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -817,7 +849,7 @@</span><br><span> </span><br><span> trunk = mgcp_trunk_by_num(g_cfg, index);</span><br><span> if (!trunk) {</span><br><span style="color: hsl(0, 100%, 40%);">- trunk = mgcp_trunk_alloc(g_cfg, MGCP_TRUNK_E1, index);</span><br><span style="color: hsl(120, 100%, 40%);">+ if(mgcp_trunk_alloc(g_cfg, MGCP_TRUNK_E1, index) != 0);</span><br><span> if (!trunk)</span><br><span> return CMD_WARNING;</span><br><span> }</span><br><span>@@ -861,7 +893,7 @@</span><br><span> else</span><br><span> vty_out(vty, " no rtcp-omit%s", VTY_NEWLINE);</span><br><span> if (trunk->force_constant_ssrc || trunk->force_aligned_timing</span><br><span style="color: hsl(0, 100%, 40%);">- || g_cfg->virt_trunk->rfc5993_hr_convert) {</span><br><span style="color: hsl(120, 100%, 40%);">+ || trunk->rfc5993_hr_convert) {</span><br><span> vty_out(vty, " %srtp-patch ssrc%s",</span><br><span> trunk->force_constant_ssrc ? "" : "no ",</span><br><span> VTY_NEWLINE);</span><br><span>@@ -1115,7 +1147,7 @@</span><br><span> struct mgcp_endpoint *endp;</span><br><span> struct mgcp_conn *conn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk = find_trunk(g_cfg, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(g_cfg, atoi(argv[0]));</span><br><span> if (!trunk) {</span><br><span> vty_out(vty, "%%Trunk %d not found in the config.%s",</span><br><span> atoi(argv[0]), VTY_NEWLINE);</span><br><span>@@ -1174,7 +1206,7 @@</span><br><span> struct mgcp_conn_rtp *conn;</span><br><span> const char *conn_id = NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk = find_trunk(g_cfg, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(g_cfg, atoi(argv[0]));</span><br><span> if (!trunk) {</span><br><span> vty_out(vty, "%%Trunk %d not found in the config.%s",</span><br><span> atoi(argv[0]), VTY_NEWLINE);</span><br><span>@@ -1227,7 +1259,7 @@</span><br><span> struct mgcp_trunk *trunk;</span><br><span> struct mgcp_endpoint *endp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk = find_trunk(g_cfg, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(g_cfg, atoi(argv[0]));</span><br><span> if (!trunk) {</span><br><span> vty_out(vty, "%%Trunk %d not found in the config.%s",</span><br><span> atoi(argv[0]), VTY_NEWLINE);</span><br><span>@@ -1260,7 +1292,7 @@</span><br><span> struct mgcp_endpoint *endp;</span><br><span> int endp_no, rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk = find_trunk(g_cfg, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(g_cfg, atoi(argv[0]));</span><br><span> if (!trunk) {</span><br><span> vty_out(vty, "%%Trunk %d not found in the config.%s",</span><br><span> atoi(argv[0]), VTY_NEWLINE);</span><br><span>@@ -1309,6 +1341,9 @@</span><br><span> "osmux (on|off|only)",</span><br><span> OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: This works only for the virtual trunk, what about other trunks? */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if (strcmp(argv[0], "off") == 0) {</span><br><span> g_cfg->osmux = OSMUX_USAGE_OFF;</span><br><span> return CMD_SUCCESS;</span><br><span>@@ -1317,7 +1352,7 @@</span><br><span> else if (strcmp(argv[0], "only") == 0)</span><br><span> g_cfg->osmux = OSMUX_USAGE_ONLY;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (g_cfg->virt_trunk->audio_loop) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trunk->audio_loop) {</span><br><span> vty_out(vty, "Cannot use `loop' with `osmux'.%s", VTY_NEWLINE);</span><br><span> return CMD_WARNING;</span><br><span> }</span><br><span>@@ -1518,13 +1553,6 @@</span><br><span> return -1;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (mgcp_trunk_alloc_endpts(g_cfg->virt_trunk) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Failed to initialize the virtual trunk (%d endpoints)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- g_cfg->virt_trunk->number_endpoints);</span><br><span style="color: hsl(0, 100%, 40%);">- return -1;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> llist_for_each_entry(trunk, &g_cfg->trunks, entry) {</span><br><span> if (mgcp_trunk_alloc_endpts(trunk) != 0) {</span><br><span> LOGP(DLMGCP, LOGL_ERROR,</span><br><span>diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c</span><br><span>index d0da18b..eff84bf 100644</span><br><span>--- a/tests/mgcp/mgcp_test.c</span><br><span>+++ b/tests/mgcp/mgcp_test.c</span><br><span>@@ -760,6 +760,7 @@</span><br><span> {</span><br><span> struct mgcp_config *cfg;</span><br><span> struct mgcp_endpoint *endp;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> struct mgcp_trunk *trunk2;</span><br><span> int i;</span><br><span> struct mgcp_conn_rtp *conn = NULL;</span><br><span>@@ -767,14 +768,16 @@</span><br><span> int rc;</span><br><span> </span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> cfg->policy_cb = mgcp_test_policy_cb;</span><br><span> </span><br><span> memset(last_conn_id, 0, sizeof(last_conn_id));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk2 = mgcp_trunk_by_num(cfg, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span> </span><br><span> for (i = 0; i < ARRAY_SIZE(tests); i++) {</span><br><span>@@ -788,7 +791,7 @@</span><br><span> last_endpoint = -1;</span><br><span> dummy_packets = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- osmo_talloc_replace_string(cfg, &cfg->virt_trunk->audio_fmtp_extra,</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_talloc_replace_string(cfg, &trunk->audio_fmtp_extra,</span><br><span> t->extra_fmtp);</span><br><span> </span><br><span> inp = create_msg(t->req, last_conn_id);</span><br><span>@@ -821,7 +824,7 @@</span><br><span> printf("Dummy packets: %d\n", dummy_packets);</span><br><span> </span><br><span> if (last_endpoint != -1) {</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> </span><br><span> conn = mgcp_conn_get_rtp(endp, "1");</span><br><span> if (conn) {</span><br><span>@@ -877,7 +880,7 @@</span><br><span> /* Check detected payload type */</span><br><span> if (conn && t->ptype != PTYPE_IGNORE) {</span><br><span> OSMO_ASSERT(last_endpoint != -1);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> </span><br><span> fprintf(stderr, "endpoint 0x%x: "</span><br><span> "payload type %d (expected %d)\n",</span><br><span>@@ -894,26 +897,29 @@</span><br><span> }</span><br><span> </span><br><span> mgcp_endpoints_release(trunk2);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span> static void test_retransmission(void)</span><br><span> {</span><br><span> struct mgcp_config *cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> struct mgcp_trunk *trunk2;</span><br><span> int i;</span><br><span> char last_conn_id[256];</span><br><span> int rc;</span><br><span> </span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> </span><br><span> memset(last_conn_id, 0, sizeof(last_conn_id));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk2 = mgcp_trunk_by_num(cfg, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span> </span><br><span> for (i = 0; i < ARRAY_SIZE(retransmit); i++) {</span><br><span>@@ -955,7 +961,7 @@</span><br><span> }</span><br><span> </span><br><span> mgcp_endpoints_release(trunk2);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span>@@ -969,17 +975,20 @@</span><br><span> static void test_rqnt_cb(void)</span><br><span> {</span><br><span> struct mgcp_config *cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> struct mgcp_trunk *trunk2;</span><br><span> struct msgb *inp, *msg;</span><br><span> char conn_id[256];</span><br><span> </span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> cfg->rqnt_cb = rqnt_cb;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk2 = mgcp_trunk_by_num(cfg, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span> </span><br><span> inp = create_msg(CRCX, NULL);</span><br><span>@@ -1010,7 +1019,7 @@</span><br><span> msgb_free(mgcp_handle_message(cfg, inp));</span><br><span> msgb_free(inp);</span><br><span> mgcp_endpoints_release(trunk2);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span>@@ -1376,6 +1385,7 @@</span><br><span> static void test_multilple_codec(void)</span><br><span> {</span><br><span> struct mgcp_config *cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> struct mgcp_trunk *trunk2;</span><br><span> struct mgcp_endpoint *endp;</span><br><span> struct msgb *inp, *resp;</span><br><span>@@ -1386,11 +1396,13 @@</span><br><span> printf("Testing multiple payload types\n");</span><br><span> </span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> cfg->policy_cb = mgcp_test_policy_cb;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk2 = mgcp_trunk_by_num(cfg, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span> </span><br><span> /* Allocate endpoint 1@mgw with two codecs */</span><br><span>@@ -1403,7 +1415,7 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 1);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 18);</span><br><span>@@ -1418,7 +1430,7 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 2);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 18);</span><br><span>@@ -1438,7 +1450,7 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 3);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 0);</span><br><span>@@ -1453,7 +1465,7 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 4);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 18);</span><br><span>@@ -1461,7 +1473,7 @@</span><br><span> /* Allocate 5@mgw and let osmo-mgw pick a codec from the list */</span><br><span> last_endpoint = -1;</span><br><span> inp = create_msg(CRCX_MULT_GSM_EXACT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->no_audio_transcoding = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->no_audio_transcoding = 1;</span><br><span> resp = mgcp_handle_message(cfg, inp);</span><br><span> OSMO_ASSERT(get_conn_id_from_response(resp->data, conn_id,</span><br><span> sizeof(conn_id)) == 0);</span><br><span>@@ -1469,7 +1481,7 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 5);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 0);</span><br><span>@@ -1480,7 +1492,7 @@</span><br><span> msgb_free(inp);</span><br><span> msgb_free(resp);</span><br><span> OSMO_ASSERT(last_endpoint == 5);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 3);</span><br><span>@@ -1502,7 +1514,7 @@</span><br><span> </span><br><span> last_endpoint = -1;</span><br><span> inp = create_msg(CRCX_MULT_GSM_EXACT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->no_audio_transcoding = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->no_audio_transcoding = 0;</span><br><span> resp = mgcp_handle_message(cfg, inp);</span><br><span> OSMO_ASSERT(get_conn_id_from_response(resp->data, conn_id,</span><br><span> sizeof(conn_id)) == 0);</span><br><span>@@ -1510,13 +1522,13 @@</span><br><span> msgb_free(resp);</span><br><span> </span><br><span> OSMO_ASSERT(last_endpoint == 5);</span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[last_endpoint];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[last_endpoint];</span><br><span> conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span> OSMO_ASSERT(conn);</span><br><span> OSMO_ASSERT(conn->end.codec->payload_type == 0);</span><br><span> </span><br><span> mgcp_endpoints_release(trunk2);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span>@@ -1526,14 +1538,16 @@</span><br><span> struct mgcp_endpoint *endp;</span><br><span> struct mgcp_conn_rtp *conn = NULL;</span><br><span> struct mgcp_conn *_conn = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> </span><br><span> printf("Testing no sequence flow on initial packet\n");</span><br><span> </span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- endp = cfg->virt_trunk->endpoints[1];</span><br><span style="color: hsl(120, 100%, 40%);">+ endp = trunk->endpoints[1];</span><br><span> </span><br><span> _conn = mgcp_conn_alloc(NULL, endp, MGCP_CONN_TYPE_RTP,</span><br><span> "test-connection");</span><br><span>@@ -1565,26 +1579,29 @@</span><br><span> OSMO_ASSERT(conn->state.stats.cycles == UINT16_MAX + 1);</span><br><span> OSMO_ASSERT(conn->state.stats.max_seq == 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span> static void test_no_name(void)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct mgcp_trunk *trunk;</span><br><span> struct mgcp_trunk *trunk2;</span><br><span> struct mgcp_config *cfg;</span><br><span> struct msgb *inp, *msg;</span><br><span> </span><br><span> printf("Testing no rtpmap name\n");</span><br><span> cfg = mgcp_config_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk = mgcp_trunk_by_num(cfg, MGCP_VIRT_TRUNK_ID);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(0, 100%, 40%);">- cfg->virt_trunk->audio_send_name = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_trunk_alloc_endpts(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->vty_number_endpoints = 64;</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk->audio_send_name = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc_endpts(trunk);</span><br><span> </span><br><span> cfg->policy_cb = mgcp_test_policy_cb;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk2 = mgcp_trunk_by_num(cfg, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span> </span><br><span> inp = create_msg(CRCX, NULL);</span><br><span>@@ -1599,7 +1616,7 @@</span><br><span> msgb_free(msg);</span><br><span> </span><br><span> mgcp_endpoints_release(trunk2);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_endpoints_release(cfg->virt_trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endpoints_release(trunk);</span><br><span> talloc_free(cfg);</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/18590">change 18590</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-mgw/+/18590"/><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-Change-Id: I81934fbd211b225ab7920e78510729c8e22607b3 </div>
<div style="display:none"> Gerrit-Change-Number: 18590 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>