<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12610">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/trxcon.h: introduce and use struct 'trxcon_inst'<br><br>Change-Id: Id868dac54693be9a67527dba06a2b80c0ecb7bd4<br>---<br>M src/host/trxcon/trxcon.c<br>M src/host/trxcon/trxcon.h<br>2 files changed, 48 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/10/12610/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/trxcon.c b/src/host/trxcon/trxcon.c</span><br><span>index 6b4c989..ab29412 100644</span><br><span>--- a/src/host/trxcon/trxcon.c</span><br><span>+++ b/src/host/trxcon/trxcon.c</span><br><span>@@ -63,11 +63,9 @@</span><br><span>   int quit;</span><br><span> </span><br><span>        /* L1CTL specific */</span><br><span style="color: hsl(0, 100%, 40%);">-    struct l1ctl_link *l1l;</span><br><span>      const char *bind_socket;</span><br><span> </span><br><span>         /* TRX specific */</span><br><span style="color: hsl(0, 100%, 40%);">-      struct trx_instance *trx;</span><br><span>    const char *trx_bind_ip;</span><br><span>     const char *trx_remote_ip;</span><br><span>   uint16_t trx_base_port;</span><br><span>@@ -184,7 +182,7 @@</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       struct osmo_fsm_inst *trxcon_fsm;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct trxcon_inst *trxcon = NULL;</span><br><span>   int rc = 0;</span><br><span> </span><br><span>      printf("%s", COPYRIGHT);</span><br><span>@@ -207,31 +205,41 @@</span><br><span>   /* Init logging system */</span><br><span>    trx_log_init(tall_trxcon_ctx, app_data.debug_mask);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Allocate a trxcon state machine */</span><br><span style="color: hsl(0, 100%, 40%);">-   trxcon_fsm = osmo_fsm_inst_alloc(&trxcon_fsm_def,</span><br><span style="color: hsl(0, 100%, 40%);">-           tall_trxcon_ctx, NULL, LOGL_DEBUG, "main");</span><br><span style="color: hsl(0, 100%, 40%);">-   if (trxcon_fsm == NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Allocate a single trxcon instance */</span><br><span style="color: hsl(120, 100%, 40%);">+       trxcon = talloc_zero(tall_trxcon_ctx, struct trxcon_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (trxcon == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DAPP, LOGL_ERROR, "Failed to allocate a trxcon instance\n");</span><br><span>          goto exit;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Allocate an associated trxcon state machine */</span><br><span style="color: hsl(120, 100%, 40%);">+     trxcon->fi = osmo_fsm_inst_alloc(&trxcon_fsm_def,</span><br><span style="color: hsl(120, 100%, 40%);">+              tall_trxcon_ctx, trxcon, LOGL_DEBUG, "main");</span><br><span style="color: hsl(120, 100%, 40%);">+       if (trxcon->fi == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGP(DAPP, LOGL_ERROR, "Failed to allocate trxcon FSM\n");</span><br><span style="color: hsl(120, 100%, 40%);">+          goto exit;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> </span><br><span>        /* Init L1CTL server */</span><br><span style="color: hsl(0, 100%, 40%);">- app_data.l1l = l1ctl_link_init(trxcon_fsm,</span><br><span style="color: hsl(120, 100%, 40%);">+    trxcon->l1l = l1ctl_link_init(trxcon->fi,</span><br><span>              app_data.bind_socket);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (app_data.l1l == NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (trxcon->l1l == NULL)</span><br><span>          goto exit;</span><br><span> </span><br><span>       /* Init transceiver interface */</span><br><span style="color: hsl(0, 100%, 40%);">-        app_data.trx = trx_if_open(trxcon_fsm,</span><br><span style="color: hsl(120, 100%, 40%);">+        trxcon->trx = trx_if_open(trxcon->fi,</span><br><span>          app_data.trx_bind_ip, app_data.trx_remote_ip,</span><br><span>                app_data.trx_base_port);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!app_data.trx)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (trxcon->trx == NULL)</span><br><span>          goto exit;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Bind L1CTL with TRX and vice versa */</span><br><span style="color: hsl(0, 100%, 40%);">-        app_data.l1l->trx = app_data.trx;</span><br><span style="color: hsl(0, 100%, 40%);">-    app_data.trx->l1l = app_data.l1l;</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Bind L1CTL with TRX and vice versa</span><br><span style="color: hsl(120, 100%, 40%);">+  * TODO: get rid of this, they should be abstracted */</span><br><span style="color: hsl(120, 100%, 40%);">+        trxcon->l1l->trx = trxcon->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+      trxcon->trx->l1l = trxcon->l1l;</span><br><span> </span><br><span>         /* Init scheduler */</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = sched_trx_init(app_data.trx, app_data.trx_fn_advance);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = sched_trx_init(trxcon->trx, app_data.trx_fn_advance);</span><br><span>        if (rc)</span><br><span>              goto exit;</span><br><span> </span><br><span>@@ -252,14 +260,21 @@</span><br><span>               osmo_select_main(0);</span><br><span> </span><br><span> exit:</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Close active connections */</span><br><span style="color: hsl(0, 100%, 40%);">-  l1ctl_link_shutdown(app_data.l1l);</span><br><span style="color: hsl(0, 100%, 40%);">-      sched_trx_shutdown(app_data.trx);</span><br><span style="color: hsl(0, 100%, 40%);">-       trx_if_close(app_data.trx);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (trxcon != NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Shutdown scheduler */</span><br><span style="color: hsl(120, 100%, 40%);">+              sched_trx_shutdown(trxcon->trx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Shutdown main state machine */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (trxcon_fsm != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-         osmo_fsm_inst_free(trxcon_fsm);</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Close active connections */</span><br><span style="color: hsl(120, 100%, 40%);">+                l1ctl_link_shutdown(trxcon->l1l);</span><br><span style="color: hsl(120, 100%, 40%);">+          trx_if_close(trxcon->trx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Shutdown main state machine */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (trxcon->fi != NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+                    osmo_fsm_inst_free(trxcon->fi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Release trxcon instance */</span><br><span style="color: hsl(120, 100%, 40%);">+         talloc_free(trxcon);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span> </span><br><span>        /* Deinitialize logging */</span><br><span>   log_fini();</span><br><span>diff --git a/src/host/trxcon/trxcon.h b/src/host/trxcon/trxcon.h</span><br><span>index 2259931..fa48d0b 100644</span><br><span>--- a/src/host/trxcon/trxcon.h</span><br><span>+++ b/src/host/trxcon/trxcon.h</span><br><span>@@ -32,3 +32,14 @@</span><br><span>        TRXCON_EV_SCHED_DL_TF_IND,      /*!< DL Traffic Frame INDication */</span><br><span>       TRXCON_EV_SCHED_UL_TF_CONF,     /*!< UL Traffic Frame CONFirmation */</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Represents a single L1CTL <-> TRX connection */</span><br><span style="color: hsl(120, 100%, 40%);">+struct trxcon_inst {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Associated instance of trxcon_fsm */</span><br><span style="color: hsl(120, 100%, 40%);">+       struct osmo_fsm_inst *fi;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Connection with transceiver */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct trx_instance *trx;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* L1CTL server */</span><br><span style="color: hsl(120, 100%, 40%);">+    struct l1ctl_link *l1l;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12610">change 12610</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/12610"/><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: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Id868dac54693be9a67527dba06a2b80c0ecb7bd4 </div>
<div style="display:none"> Gerrit-Change-Number: 12610 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>