<p>Vadim Yanitskiy <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12582">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/trx_if: refactor trx_if_open()<br><br>The main changes are:<br><br>  - return pointer to the allocated trx_instance or NULL,<br>  - extend debug message with TRX address and base port,<br>  - accept the talloc context as 'tall_ctx' argument,<br>  - rename goto label 'error' to 'udp_error',<br>  - rename argument 'port' to 'base_port'.<br><br>Change-Id: I39b24afee2f09d6a6c500cfc26ac45f206589c5c<br>---<br>M src/host/trxcon/trx_if.c<br>M src/host/trxcon/trx_if.h<br>M src/host/trxcon/trxcon.c<br>3 files changed, 32 insertions(+), 34 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/trx_if.c b/src/host/trxcon/trx_if.c</span><br><span>index bff73cc..4c10da6 100644</span><br><span>--- a/src/host/trxcon/trx_if.c</span><br><span>+++ b/src/host/trxcon/trx_if.c</span><br><span>@@ -626,58 +626,55 @@</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Open/close OsmoTRX connection</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%);">-int trx_if_open(struct trx_instance **trx, const char *local_host,</span><br><span style="color: hsl(0, 100%, 40%);">-               const char *remote_host, uint16_t port)</span><br><span style="color: hsl(120, 100%, 40%);">+/* Init TRX interface (TRXC, TRXD sockets and FSM) */</span><br><span style="color: hsl(120, 100%, 40%);">+struct trx_instance *trx_if_open(void *tall_ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+      const char *local_host, const char *remote_host,</span><br><span style="color: hsl(120, 100%, 40%);">+      uint16_t base_port)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        struct trx_instance *trx_new;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct trx_instance *trx;</span><br><span>    int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DTRX, LOGL_NOTICE, "Init transceiver interface\n");</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGP(DTRX, LOGL_NOTICE, "Init transceiver interface "</span><br><span style="color: hsl(120, 100%, 40%);">+               "(%s:%u)\n", remote_host, base_port);</span><br><span> </span><br><span>  /* Try to allocate memory */</span><br><span style="color: hsl(0, 100%, 40%);">-    trx_new = talloc_zero(tall_trx_ctx, struct trx_instance);</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!trx_new) {</span><br><span style="color: hsl(120, 100%, 40%);">+       trx = talloc_zero(tall_ctx, struct trx_instance);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!trx) {</span><br><span>          LOGP(DTRX, LOGL_ERROR, "Failed to allocate memory\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                return -ENOMEM;</span><br><span style="color: hsl(120, 100%, 40%);">+               return NULL;</span><br><span>         }</span><br><span> </span><br><span>        /* Allocate a new dedicated state machine */</span><br><span style="color: hsl(0, 100%, 40%);">-    trx_new->fsm = osmo_fsm_inst_alloc(&trx_fsm, trx_new,</span><br><span style="color: hsl(120, 100%, 40%);">+  trx->fsm = osmo_fsm_inst_alloc(&trx_fsm, trx,</span><br><span>                 NULL, LOGL_DEBUG, "trx_interface");</span><br><span style="color: hsl(0, 100%, 40%);">-   if (trx_new->fsm == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (trx->fsm == NULL) {</span><br><span>           LOGP(DTRX, LOGL_ERROR, "Failed to allocate an instance "</span><br><span>                   "of FSM '%s'\n", trx_fsm.name);</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(trx_new);</span><br><span style="color: hsl(0, 100%, 40%);">-           return -ENOMEM;</span><br><span style="color: hsl(120, 100%, 40%);">+               talloc_free(trx);</span><br><span style="color: hsl(120, 100%, 40%);">+             return NULL;</span><br><span>         }</span><br><span> </span><br><span>        /* Initialize CTRL queue */</span><br><span style="color: hsl(0, 100%, 40%);">-     INIT_LLIST_HEAD(&trx_new->trx_ctrl_list);</span><br><span style="color: hsl(120, 100%, 40%);">+      INIT_LLIST_HEAD(&trx->trx_ctrl_list);</span><br><span> </span><br><span>     /* Open sockets */</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = trx_udp_open(trx_new, &trx_new->trx_ofd_ctrl, local_host,</span><br><span style="color: hsl(0, 100%, 40%);">-           port + 101, remote_host, port + 1, trx_ctrl_read_cb);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = trx_udp_open(trx, &trx->trx_ofd_ctrl, local_host,</span><br><span style="color: hsl(120, 100%, 40%);">+         base_port + 101, remote_host, base_port + 1, trx_ctrl_read_cb);</span><br><span>      if (rc < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-          goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+           goto udp_error;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rc = trx_udp_open(trx_new, &trx_new->trx_ofd_data, local_host,</span><br><span style="color: hsl(0, 100%, 40%);">-           port + 102, remote_host, port + 2, trx_data_rx_cb);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = trx_udp_open(trx, &trx->trx_ofd_data, local_host,</span><br><span style="color: hsl(120, 100%, 40%);">+         base_port + 102, remote_host, base_port + 2, trx_data_rx_cb);</span><br><span>        if (rc < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-          goto error;</span><br><span style="color: hsl(120, 100%, 40%);">+           goto udp_error;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     *trx = trx_new;</span><br><span style="color: hsl(120, 100%, 40%);">+       return trx;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-error:</span><br><span style="color: hsl(120, 100%, 40%);">+udp_error:</span><br><span>  LOGP(DTRX, LOGL_ERROR, "Couldn't establish UDP connection\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    osmo_fsm_inst_free(trx_new->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-    talloc_free(trx_new);</span><br><span style="color: hsl(0, 100%, 40%);">-   return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo_fsm_inst_free(trx->fsm);</span><br><span style="color: hsl(120, 100%, 40%);">+      talloc_free(trx);</span><br><span style="color: hsl(120, 100%, 40%);">+     return NULL;</span><br><span> }</span><br><span> </span><br><span> /* Flush pending control messages */</span><br><span>diff --git a/src/host/trxcon/trx_if.h b/src/host/trxcon/trx_if.h</span><br><span>index d551252..0b3f36f 100644</span><br><span>--- a/src/host/trxcon/trx_if.h</span><br><span>+++ b/src/host/trxcon/trx_if.h</span><br><span>@@ -52,8 +52,8 @@</span><br><span>       int cmd_len;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int trx_if_open(struct trx_instance **trx, const char *local_host,</span><br><span style="color: hsl(0, 100%, 40%);">-                const char *remote_host, uint16_t port);</span><br><span style="color: hsl(120, 100%, 40%);">+struct trx_instance *trx_if_open(void *tall_ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+    const char *local_host, const char *remote_host, uint16_t port);</span><br><span> void trx_if_flush_ctrl(struct trx_instance *trx);</span><br><span> void trx_if_close(struct trx_instance *trx);</span><br><span> </span><br><span>diff --git a/src/host/trxcon/trxcon.c b/src/host/trxcon/trxcon.c</span><br><span>index 874f893..501d0c7 100644</span><br><span>--- a/src/host/trxcon/trxcon.c</span><br><span>+++ b/src/host/trxcon/trxcon.c</span><br><span>@@ -284,9 +284,10 @@</span><br><span>                goto exit;</span><br><span> </span><br><span>       /* Init transceiver interface */</span><br><span style="color: hsl(0, 100%, 40%);">-        rc = trx_if_open(&app_data.trx,</span><br><span style="color: hsl(0, 100%, 40%);">-             app_data.trx_bind_ip, app_data.trx_remote_ip, app_data.trx_base_port);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (rc)</span><br><span style="color: hsl(120, 100%, 40%);">+       app_data.trx = trx_if_open(tall_trx_ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+              app_data.trx_bind_ip, app_data.trx_remote_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+         app_data.trx_base_port);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!app_data.trx)</span><br><span>           goto exit;</span><br><span> </span><br><span>       /* Bind L1CTL with TRX and vice versa */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12582">change 12582</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/12582"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I39b24afee2f09d6a6c500cfc26ac45f206589c5c </div>
<div style="display:none"> Gerrit-Change-Number: 12582 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>