<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/18590">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
neels: Looks good to me, but someone else must approve
</div><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_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>7 files changed, 155 insertions(+), 105 deletions(-)<br><br></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 989d138..33bfe71 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp.h</span><br><span>@@ -152,11 +152,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 c230e9f..78d65e4 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_trunk.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_trunk.h</span><br><span>@@ -45,3 +45,8 @@</span><br><span> int mgcp_trunk_alloc_endpts(struct mgcp_trunk *tcfg);</span><br><span> struct mgcp_trunk *mgcp_trunk_by_num(const struct mgcp_config *cfg, int index);</span><br><span> struct mgcp_trunk *mgcp_trunk_by_name(const struct mgcp_config *cfg, const char *epname);</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_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>index ca8b5f0..9715e70 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, MGCP_VIRT_TRUNK_ID);</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 1d25c45..1e393e2 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -1498,16 +1498,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)) {</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_global_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 024db03..208604a 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>@@ -52,11 +52,7 @@</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(120, 100%, 40%);">+ llist_add_tail(&trunk->entry, &cfg->trunks);</span><br><span> </span><br><span> mgcp_ratectr_trunk_alloc(cfg, &trunk->ratectr);</span><br><span> </span><br><span>@@ -152,7 +148,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, MGCP_VIRT_TRUNK_ID);</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>@@ -175,7 +171,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, MGCP_VIRT_TRUNK_ID);</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 4cfe3b5..938eef5 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,8 @@</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 style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -328,8 +317,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>@@ -388,7 +375,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>@@ -578,11 +565,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -591,7 +580,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -599,7 +590,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -635,7 +628,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -644,7 +639,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -653,7 +650,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -662,7 +661,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -671,11 +672,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -685,7 +688,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -695,7 +700,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -704,21 +711,26 @@</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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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%);">+ 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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -726,7 +738,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -734,7 +748,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -742,7 +758,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -750,7 +768,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -758,7 +778,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -766,16 +788,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -784,7 +810,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -793,7 +821,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -801,7 +831,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -826,6 +858,11 @@</span><br><span> struct mgcp_trunk *trunk;</span><br><span> int index = atoi(argv[0]);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Due to historical reasons, the trunk id number 0 is reserved for the</span><br><span style="color: hsl(120, 100%, 40%);">+ * virtual trunk. This trunk is configured with separate VTY</span><br><span style="color: hsl(120, 100%, 40%);">+ * parameters, so we restrict the access to trunks with id numbers</span><br><span style="color: hsl(120, 100%, 40%);">+ * greater than 0. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> trunk = mgcp_trunk_by_num(g_cfg, index);</span><br><span> if (!trunk) {</span><br><span> trunk = mgcp_trunk_alloc(g_cfg, MGCP_TRUNK_E1, index);</span><br><span>@@ -846,6 +883,15 @@</span><br><span> struct mgcp_trunk *trunk;</span><br><span> </span><br><span> llist_for_each_entry(trunk, &g_cfg->trunks, entry) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Due to historical reasons, the virtual trunk is configured</span><br><span style="color: hsl(120, 100%, 40%);">+ using separate VTY parameters, so we omit writing the trunk</span><br><span style="color: hsl(120, 100%, 40%);">+ config of trunk 0 here. The configuration for the virtual</span><br><span style="color: hsl(120, 100%, 40%);">+ trunk is written by config_write_mgcp(). */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trunk->trunk_nr == MGCP_VIRT_TRUNK_ID)</span><br><span style="color: hsl(120, 100%, 40%);">+ continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> vty_out(vty, " trunk %d%s", trunk->trunk_nr, VTY_NEWLINE);</span><br><span> vty_out(vty, " %ssdp audio-payload send-ptime%s",</span><br><span> trunk->audio_send_ptime ? "" : "no ", VTY_NEWLINE);</span><br><span>@@ -869,7 +915,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>@@ -1123,7 +1169,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>@@ -1182,7 +1228,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>@@ -1235,7 +1281,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>@@ -1268,7 +1314,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>@@ -1317,6 +1363,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%);">+ struct mgcp_trunk *trunk = mgcp_trunk_by_num(g_cfg, MGCP_VIRT_TRUNK_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(trunk);</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>@@ -1325,7 +1374,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>@@ -1526,13 +1575,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..56a17b1 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,9 +768,10 @@</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>@@ -788,7 +790,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 +823,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 +879,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,22 +896,24 @@</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>@@ -955,7 +959,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,15 +973,17 @@</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> trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span> mgcp_trunk_alloc_endpts(trunk2);</span><br><span>@@ -1010,7 +1016,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 +1382,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,8 +1393,9 @@</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> trunk2 = mgcp_trunk_alloc(cfg, MGCP_TRUNK_E1, 1);</span><br><span>@@ -1403,7 +1411,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 +1426,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 +1446,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 +1461,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 +1469,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 +1477,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 +1488,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 +1510,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 +1518,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 +1534,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,22 +1575,24 @@</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>@@ -1599,7 +1611,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: 13 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>