<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24862">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgw: rx CRCX: Avoid sending dummy rtp if remote address not provided<br><br>The following sequence of events was seen frequently in a osmo-mgw<br>instance running on the field with heavy traffic:<br>"""<br>endpoint:rtpbridge/1@mgw CRCX: creating new connection ...<br>mgcp_network.c:236 endpoint:rtpbridge/1@mgw CI:1C8CCFA9 Failed to send dummy RTP packet.<br>"""<br><br>Allegedly, that happens because at CRCX time the remote address may<br>still not be known, hence we end up trying to send a dummy rtp packet<br>to, for instance, host 0.0.0.0 port 0, which will of course fail.<br>Let's avoid sending it if the address is not yet known.<br><br>Similary, same issue could be seen during MDCX, since at MDCX we don't<br>necessarily need to have a valid addr+port (there could be several MDCX<br>and only last one set it).<br><br>Finally, the keepalive timer also needs the check, since it iterates<br>over all connections, and it could be that some is still not fully<br>configured.<br><br>Related: SYS#5498<br>Change-Id: I8ceafda691146823b12232b4a804b4ce74acbdc8<br>---<br>M include/osmocom/mgcp/mgcp_network.h<br>M src/libosmo-mgcp/mgcp_network.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>3 files changed, 11 insertions(+), 2 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/62/24862/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp_network.h b/include/osmocom/mgcp/mgcp_network.h</span><br><span>index 1766f4a..643ed51 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_network.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_network.h</span><br><span>@@ -132,6 +132,8 @@</span><br><span>      char local_addr[INET6_ADDRSTRLEN];</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+bool mgcp_rtp_end_remote_addr_available(const struct mgcp_rtp_end *rtp_end);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct mgcp_rtp_tap {</span><br><span>        /* is this tap active (1) or not (0) */</span><br><span>      int enabled;</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index 8de85b8..785b99e 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -77,7 +77,7 @@</span><br><span> </span><br><span> static int rx_rtp(struct msgb *msg);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static bool addr_is_any(struct osmo_sockaddr *osa) {</span><br><span style="color: hsl(120, 100%, 40%);">+static bool addr_is_any(const struct osmo_sockaddr *osa) {</span><br><span>    if (osa->u.sa.sa_family == AF_INET6) {</span><br><span>            struct in6_addr ip6_any = IN6ADDR_ANY_INIT;</span><br><span>          return memcmp(&osa->u.sin6.sin6_addr,</span><br><span>@@ -87,6 +87,11 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+bool mgcp_rtp_end_remote_addr_available(const struct mgcp_rtp_end *rtp_end)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    return rtp_end->rtp_port && !addr_is_any(&rtp_end->addr);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Determine the local rtp bind IP-address.</span><br><span>  *  \param[out] addr caller provided memory to store the resulting IP-Address.</span><br><span>  *  \param[in] endp mgcp endpoint, that holds a copy of the VTY parameters.</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 3014048..fd8c3d1 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -991,6 +991,7 @@</span><br><span>         /* Send dummy packet, see also comments in mgcp_keepalive_timer_cb() */</span><br><span>      OSMO_ASSERT(trunk->keepalive_interval >= MGCP_KEEPALIVE_ONCE);</span><br><span>         if (conn->conn->mode & MGCP_CONN_RECV_ONLY</span><br><span style="color: hsl(120, 100%, 40%);">+      && mgcp_rtp_end_remote_addr_available(&conn->end)</span><br><span>             && trunk->keepalive_interval != MGCP_KEEPALIVE_NEVER)</span><br><span>                 send_dummy(endp, conn);</span><br><span> </span><br><span>@@ -1148,7 +1149,7 @@</span><br><span>  /* check connection mode setting */</span><br><span>  if (conn->conn->mode != MGCP_CONN_LOOPBACK</span><br><span>         && conn->conn->mode != MGCP_CONN_RECV_ONLY</span><br><span style="color: hsl(0, 100%, 40%);">-        && conn->end.rtp_port == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+      && mgcp_rtp_end_remote_addr_available(&conn->end)) {</span><br><span>              LOGPCONN(conn->conn, DLMGCP, LOGL_ERROR,</span><br><span>                   "MDCX: selected connection mode type requires an opposite end!\n");</span><br><span>               error_code = 527;</span><br><span>@@ -1233,6 +1234,7 @@</span><br><span>    /* Send dummy packet, see also comments in mgcp_keepalive_timer_cb() */</span><br><span>      OSMO_ASSERT(endp->trunk->keepalive_interval >= MGCP_KEEPALIVE_ONCE);</span><br><span>        if (conn->conn->mode & MGCP_CONN_RECV_ONLY</span><br><span style="color: hsl(120, 100%, 40%);">+      && mgcp_rtp_end_remote_addr_available(&conn->end)</span><br><span>             && endp->trunk->keepalive_interval != MGCP_KEEPALIVE_NEVER)</span><br><span>                send_dummy(endp, conn);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24862">change 24862</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/+/24862"/><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: I8ceafda691146823b12232b4a804b4ce74acbdc8 </div>
<div style="display:none"> Gerrit-Change-Number: 24862 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>