<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/19971">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgw: Find and store RTP conn local_addr once during CRCX handling<br><br>It doesn't make sense to call the function several times since anyway we<br>are only binding during<br>allocate_port()->mgcp_bind_net_rtp_port()->bind_rtp()->mgcp_create_bind()->osmo_sock_init2().<br><br>Let's better calculate the local IP addr once and use that stored value.<br>THis is a previous step towards next commit updating the local IP addr<br>and re-bindng if encessary.<br><br>Change-Id: I803b99c5e5fe0f92a5bf6796d8c25df88d1608e6<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, 15 insertions(+), 14 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/71/19971/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 9674445..7dbf330 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_network.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_network.h</span><br><span>@@ -118,6 +118,9 @@</span><br><span> </span><br><span>       /* local UDP port number of the RTP socket; RTCP is +1 */</span><br><span>    int local_port;</span><br><span style="color: hsl(120, 100%, 40%);">+       /* where the endpoint RTP connection binds to, set during CRCX and</span><br><span style="color: hsl(120, 100%, 40%);">+     * possibly updated during MDCX */</span><br><span style="color: hsl(120, 100%, 40%);">+    char local_addr[INET6_ADDRSTRLEN];</span><br><span> };</span><br><span> </span><br><span> struct mgcp_rtp_tap {</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index c90991c..e7cccde 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -1620,7 +1620,6 @@</span><br><span> {</span><br><span>  char name[512];</span><br><span>      struct mgcp_rtp_end *end;</span><br><span style="color: hsl(0, 100%, 40%);">-       char local_ip_addr[INET6_ADDRSTRLEN];</span><br><span> </span><br><span>    snprintf(name, sizeof(name), "%s-%s", conn->conn->name, conn->conn->id);</span><br><span>       end = &conn->end;</span><br><span>@@ -1643,9 +1642,7 @@</span><br><span>     end->rtcp.data = conn;</span><br><span>    end->rtcp.cb = rtp_data_net;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     mgcp_get_local_addr(local_ip_addr, conn);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return bind_rtp(endp->cfg, local_ip_addr, end, endp);</span><br><span style="color: hsl(120, 100%, 40%);">+      return bind_rtp(endp->cfg, conn->end.local_addr, end, endp);</span><br><span> }</span><br><span> </span><br><span> /*! free allocated RTP and RTCP ports.</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 1269524..1e7ccbf 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -223,24 +223,22 @@</span><br><span>                                        const char *trans_id,</span><br><span>                                        bool add_conn_params)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- /* TODO: we may want to define another local_ip_osmux var to us for</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMUX connections. Perhaps adding a new internal API to get it based</span><br><span style="color: hsl(0, 100%, 40%);">-    on conn type */</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *addr = endp->cfg->local_ip;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* cfg->local_ip allows overwritting the announced IP address with</span><br><span style="color: hsl(120, 100%, 40%);">+  * regards to the one we actually bind to. Useful in behind-NAT</span><br><span style="color: hsl(120, 100%, 40%);">+        * scenarios.</span><br><span style="color: hsl(120, 100%, 40%);">+  * TODO: we may want to define another local_ip_osmux var to</span><br><span style="color: hsl(120, 100%, 40%);">+   * us for OSMUX connections. Perhaps adding a new internal API to get it</span><br><span style="color: hsl(120, 100%, 40%);">+       * based on conn type.</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *addr = endp->cfg->local_ip ? : conn->end.local_addr;</span><br><span>    struct msgb *sdp;</span><br><span>    int rc;</span><br><span>      struct msgb *result;</span><br><span style="color: hsl(0, 100%, 40%);">-    char local_ip_addr[INET6_ADDRSTRLEN];</span><br><span> </span><br><span>    sdp = msgb_alloc_headroom(4096, 128, "sdp record");</span><br><span>        if (!sdp)</span><br><span>            return NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (!addr) {</span><br><span style="color: hsl(0, 100%, 40%);">-            mgcp_get_local_addr(local_ip_addr, conn);</span><br><span style="color: hsl(0, 100%, 40%);">-               addr = local_ip_addr;</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* Attach optional connection parameters */</span><br><span>  if (add_conn_params) {</span><br><span>               rc = add_params(sdp, endp, conn);</span><br><span>@@ -943,6 +941,9 @@</span><br><span>              goto error2;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Find a local address for conn based on policy and initial SDP remote</span><br><span style="color: hsl(120, 100%, 40%);">+          information, then find a free port for it */</span><br><span style="color: hsl(120, 100%, 40%);">+       mgcp_get_local_addr(conn->end.local_addr, conn);</span><br><span>  if (allocate_port(endp, conn) != 0) {</span><br><span>                rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_BIND_PORT]);</span><br><span>              goto error2;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/19971">change 19971</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/+/19971"/><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: I803b99c5e5fe0f92a5bf6796d8c25df88d1608e6 </div>
<div style="display:none"> Gerrit-Change-Number: 19971 </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>