<p>Hoernchen has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25425">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">e1: one thread per e1 trunk == e1 line<br><br>There is only one thread per trunk, and one trunk can only have one<br>line, so saving the trunk pointer is sufficient to know which line we<br>are.<br><br>Change-Id: Iabee6375dc521397d605549e3d869d5c8048fac3<br>---<br>M src/libosmo-mgcp/mgcp_e1.c<br>M src/libosmo-mgcp/mgcp_trunk.c<br>2 files changed, 7 insertions(+), 27 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/25/25425/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>index e88b8c5..16f78f1 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_e1.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>@@ -48,7 +48,7 @@</span><br><span> #define E1_TRAU_BITS 320</span><br><span> #define E1_TRAU_BITS_MSGB 2048</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct mgcp_config *cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+static __thread struct mgcp_trunk *this_trunk;</span><br><span> </span><br><span> static const struct e1inp_line_ops dummy_e1_line_ops = {</span><br><span>     .sign_link_up = NULL,</span><br><span>@@ -332,33 +332,29 @@</span><br><span> /* Callback function to handle incoming E1 traffic */</span><br><span> static void e1_recv_cb(struct e1inp_ts *ts, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    struct mgcp_trunk *trunk;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Find associated trunk */</span><br><span style="color: hsl(0, 100%, 40%);">-     trunk = mgcp_trunk_by_line_num(cfg, ts->line->num);</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!trunk) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!this_trunk) {</span><br><span>           LOGP(DE1, LOGL_ERROR, "E1-RX: unable to find a trunk for E1-line %u!\n", ts->line->num);</span><br><span>             return;</span><br><span>      }</span><br><span> </span><br><span>        /* Check if the incoming data looks sane */</span><br><span>  if (msgb_length(msg) != E1_TS_BYTES) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPTRUNK(trunk, DE1, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPTRUNK(this_trunk, DE1, LOGL_NOTICE,</span><br><span>                        "E1-RX: (ts:%u) expected length is %u, actual length is %u!\n", ts->num, E1_TS_BYTES,</span><br><span>                           msgb_length(msg));</span><br><span>         }</span><br><span> #if DEBUG_E1_TS == 1</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGPTRUNK(trunk, DE1, LOGL_DEBUG, "E1-RX: (ts:%u) receiving %u bytes: %s...\n", ts->num,</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGPTRUNK(this_trunk, DE1, LOGL_DEBUG, "E1-RX: (ts:%u) receiving %u bytes: %s...\n", ts->num,</span><br><span>             msgb_length(msg), osmo_hexdump_nospc(msgb_data(msg),</span><br><span>                                                      msgb_length(msg) ></span><br><span>                                                        DEBUG_BYTES_MAX ? DEBUG_BYTES_MAX : msgb_length(msg)));</span><br><span> #endif</span><br><span> </span><br><span>         /* Hand data over to the I.460 demultiplexer. */</span><br><span style="color: hsl(0, 100%, 40%);">-        osmo_i460_demux_in(&trunk->e1.i460_ts[ts->num - 1], msgb_data(msg), msgb_length(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_i460_demux_in(&this_trunk->e1.i460_ts[ts->num - 1], msgb_data(msg), msgb_length(msg));</span><br><span> </span><br><span>    /* Trigger sending of pending E1 traffic */</span><br><span style="color: hsl(0, 100%, 40%);">-     e1_send(ts, trunk);</span><br><span style="color: hsl(120, 100%, 40%);">+   e1_send(ts, this_trunk);</span><br><span> }</span><br><span> </span><br><span> static int e1_init(struct mgcp_trunk *trunk, uint8_t ts_nr)</span><br><span>@@ -373,7 +369,7 @@</span><br><span>       int rc;</span><br><span> </span><br><span>  OSMO_ASSERT(ts_nr > 0 || ts_nr < NUM_E1_TS);</span><br><span style="color: hsl(0, 100%, 40%);">-      cfg = trunk->cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+  this_trunk = trunk;</span><br><span> </span><br><span>      if (trunk->e1.ts_in_use[ts_nr - 1]) {</span><br><span>             LOGPTRUNK(trunk, DE1, LOGL_INFO, "E1 timeslot %u already set up, skipping...\n", ts_nr);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_trunk.c b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>index c69c242..8bdef94 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>@@ -290,19 +290,3 @@</span><br><span>   LOGP(DLMGCP, LOGL_ERROR, "unable to find trunk for endpoint name \"%s\"!\n", epname);</span><br><span>    return NULL;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! Find a trunk (E1) by its associated E1 line number.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] num e1 line number.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns trunk or NULL if trunk was not found. */</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_trunk *mgcp_trunk_by_line_num(const struct mgcp_config *cfg, unsigned int num)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      /*! When used on trunks other than E1, the result will always be NULL. */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_trunk *trunk;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       llist_for_each_entry(trunk, &cfg->trunks, entry) {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (trunk->trunk_type == MGCP_TRUNK_E1 && trunk->e1.vty_line_nr == num)</span><br><span style="color: hsl(0, 100%, 40%);">-                   return trunk;</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%);">-       return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25425">change 25425</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/+/25425"/><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: Iabee6375dc521397d605549e3d869d5c8048fac3 </div>
<div style="display:none"> Gerrit-Change-Number: 25425 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>