<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24823">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_protocol: add support for wildcarded DLCX<br><br>At the moment osmo-mgw does not support wildcarded DLCX requests that<br>refer to the whole trunk, even though RFC3435 specifies it. However,<br>wildcarded DLCX requests would enable the BSC or the MSC to reset its<br>companioun osmo-mgw instance to a defined state after restart.<br><br>Change-Id: I0770cf46d93ab09efe9cafdd56d2e3f1132db189<br>---<br>M src/libosmo-mgcp/mgcp_protocol.c<br>M src/libosmo-mgcp/mgcp_ratectr.c<br>2 files changed, 20 insertions(+), 13 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/23/24823/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 3014048..55c5370 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -1263,9 +1263,10 @@</span><br><span> char stats[1048];</span><br><span> const char *conn_id = NULL;</span><br><span> struct mgcp_conn_rtp *conn = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int i;</span><br><span> </span><br><span> LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span style="color: hsl(0, 100%, 40%);">- "DLCX: deleting connection ...\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ "DLCX: deleting connection(s) ...\n");</span><br><span> </span><br><span> if (!mgcp_endp_avail(endp)) {</span><br><span> rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_AVAIL));</span><br><span>@@ -1274,15 +1275,7 @@</span><br><span> return create_err_response(NULL, 501, "DLCX", p->trans);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Prohibit wildcarded requests */</span><br><span style="color: hsl(0, 100%, 40%);">- if (endp->wildcarded_req) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "DLCX: wildcarded endpoint names not supported.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_WILDCARD));</span><br><span style="color: hsl(0, 100%, 40%);">- return create_err_response(endp, 507, "DLCX", p->trans);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (llist_count(&endp->conns) <= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!endp->wildcarded_req && llist_count(&endp->conns) <= 0) {</span><br><span> LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span> "DLCX: endpoint is not holding a connection.\n");</span><br><span> rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_NO_CONN));</span><br><span>@@ -1344,9 +1337,23 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Handle wildcarded DLCX that refers to the whole trunk. This means</span><br><span style="color: hsl(120, 100%, 40%);">+ * that we walk over all endpoints on the trank in order to drop all</span><br><span style="color: hsl(120, 100%, 40%);">+ * connections on the trunk. (see also RFC3435 Annex F.7) */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (endp->wildcarded_req) {</span><br><span style="color: hsl(120, 100%, 40%);">+ int num_conns = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < endp->trunk->number_endpoints; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ num_conns += llist_count(&endp->conns);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_endp_release(endp->trunk->endpoints[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_add(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS), num_conns);</span><br><span style="color: hsl(120, 100%, 40%);">+ return create_ok_response(endp, 200, "DLCX", p->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* When no connection id is supplied, we will interpret this as a</span><br><span style="color: hsl(0, 100%, 40%);">- * wildcarded DLCX and drop all connections at once. (See also</span><br><span style="color: hsl(0, 100%, 40%);">- * RFC3435 Section F.7) */</span><br><span style="color: hsl(120, 100%, 40%);">+ * wildcarded DLCX that refers to the selected endpoint. This means</span><br><span style="color: hsl(120, 100%, 40%);">+ * that we drop all connections on that specific endpoint at once.</span><br><span style="color: hsl(120, 100%, 40%);">+ * (See also RFC3435 Section F.7) */</span><br><span> if (!conn_id) {</span><br><span> int num_conns = llist_count(&endp->conns);</span><br><span> LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_ratectr.c b/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>index 2868062..833cb19 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>@@ -105,7 +105,7 @@</span><br><span> </span><br><span> static const struct rate_ctr_desc mgcp_dlcx_ctr_desc[] = {</span><br><span> [MGCP_DLCX_SUCCESS] = { "dlcx:success", "DLCX command processed successfully." },</span><br><span style="color: hsl(0, 100%, 40%);">- [MGCP_DLCX_FAIL_WILDCARD] = { "dlcx:wildcard", "wildcard names in DLCX commands are unsupported." },</span><br><span style="color: hsl(120, 100%, 40%);">+ [MGCP_DLCX_FAIL_WILDCARD] = { "dlcx:wildcard", "(deprecated)" },</span><br><span> [MGCP_DLCX_FAIL_NO_CONN] = { "dlcx:no_conn", "endpoint specified in DLCX command has no active connections." },</span><br><span> [MGCP_DLCX_FAIL_INVALID_CALLID] =</span><br><span> { "dlcx:callid", "CallId specified in DLCX command mismatches endpoint's CallId ." },</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24823">change 24823</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/+/24823"/><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: I0770cf46d93ab09efe9cafdd56d2e3f1132db189 </div>
<div style="display:none"> Gerrit-Change-Number: 24823 </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>