<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18933">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">e1_input: Support I.460 timeslot type<br><br>Unlike the legacy TRAU mode, this only adds I460 mux/demux,<br>without any TRAU frame synchronization.  The user must still be<br>adding the actual sub-channels using osmo_i460_subchan_add()<br>depending on his requirements.<br><br>Change-Id: I44da6dfec77ef475adb35001a0e4fa11d549aa02<br>---<br>M include/osmocom/abis/e1_input.h<br>M src/e1_input.c<br>M src/input/dahdi.c<br>M src/input/e1d.c<br>M src/input/misdn.c<br>5 files changed, 41 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/abis/e1_input.h b/include/osmocom/abis/e1_input.h</span><br><span>index 44708bb..9b99f12 100644</span><br><span>--- a/include/osmocom/abis/e1_input.h</span><br><span>+++ b/include/osmocom/abis/e1_input.h</span><br><span>@@ -9,6 +9,7 @@</span><br><span> #include <osmocom/core/timer.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/select.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/i460_mux.h></span><br><span> #include <osmocom/abis/subchan_demux.h></span><br><span> #include <osmocom/abis/lapd.h></span><br><span> </span><br><span>@@ -73,9 +74,10 @@</span><br><span>      E1INP_TS_TYPE_TRAU,</span><br><span>  E1INP_TS_TYPE_RAW,</span><br><span>   E1INP_TS_TYPE_HDLC,</span><br><span style="color: hsl(120, 100%, 40%);">+   E1INP_TS_TYPE_I460,</span><br><span> };</span><br><span> const char *e1inp_tstype_name(enum e1inp_ts_type tp);</span><br><span style="color: hsl(0, 100%, 40%);">-extern const struct value_string e1inp_ts_type_names[6];</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string e1inp_ts_type_names[];</span><br><span> </span><br><span> /* A timeslot in the E1 interface */</span><br><span> struct e1inp_ts {</span><br><span>@@ -115,6 +117,9 @@</span><br><span>                   /* queue of pending to-be-transmitted msgbs */</span><br><span>                       struct llist_head tx_queue;</span><br><span>          } hdlc;</span><br><span style="color: hsl(120, 100%, 40%);">+               struct {</span><br><span style="color: hsl(120, 100%, 40%);">+                      struct osmo_i460_timeslot i460_ts;</span><br><span style="color: hsl(120, 100%, 40%);">+            } i460;</span><br><span>      };</span><br><span>   union {</span><br><span>              struct {</span><br><span>diff --git a/src/e1_input.c b/src/e1_input.c</span><br><span>index df61c7b..04c464a 100644</span><br><span>--- a/src/e1_input.c</span><br><span>+++ b/src/e1_input.c</span><br><span>@@ -44,6 +44,7 @@</span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/signal.h></span><br><span> #include <osmocom/core/endian.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/i460_mux.h></span><br><span> #include <osmocom/abis/e1_input.h></span><br><span> </span><br><span> #define NUM_E1_TS  32</span><br><span>@@ -241,12 +242,13 @@</span><br><span>   return get_value_string(e1inp_sign_type_names, tp);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-const struct value_string e1inp_ts_type_names[6] = {</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string e1inp_ts_type_names[] = {</span><br><span>        { E1INP_TS_TYPE_NONE,   "None" },</span><br><span>  { E1INP_TS_TYPE_SIGN,   "Signalling" },</span><br><span>    { E1INP_TS_TYPE_TRAU,   "TRAU" },</span><br><span>  { E1INP_TS_TYPE_RAW,    "RAW" },</span><br><span>   { E1INP_TS_TYPE_HDLC,   "HDLC" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { E1INP_TS_TYPE_I460,   "I460" },</span><br><span>  { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -313,6 +315,17 @@</span><br><span>         return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int e1inp_ts_config_i460(struct e1inp_ts *ts, struct e1inp_line *line)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ts->type == E1INP_TS_TYPE_I460 && ts->line && line)</span><br><span style="color: hsl(120, 100%, 40%);">+         return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ts->type = E1INP_TS_TYPE_I460;</span><br><span style="color: hsl(120, 100%, 40%);">+     ts->line = line;</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_i460_ts_init(&ts->i460.i460_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void e1inp_ts_name(char *out, size_t out_len, const struct e1inp_ts *ts)</span><br><span> {</span><br><span>      if (ts->line->name)</span><br><span>@@ -679,6 +692,10 @@</span><br><span>     case E1INP_TS_TYPE_HDLC:</span><br><span>             ts->hdlc.recv_cb(ts, msg);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case E1INP_TS_TYPE_I460:</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_i460_demux_in(&ts->i460.i460_ts, msg->l2h, msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+           msgb_free(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       default:</span><br><span>             ret = -EINVAL;</span><br><span>               LOGPITS(ts, DLMI, LOGL_ERROR, "unknown TS type %u\n", ts->type);</span><br><span>@@ -809,6 +826,13 @@</span><br><span>                 /* Get msgb from tx_queue */</span><br><span>                 msg = msgb_dequeue(&e1i_ts->hdlc.tx_queue);</span><br><span>           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case E1INP_TS_TYPE_I460:</span><br><span style="color: hsl(120, 100%, 40%);">+              msg = msgb_alloc(TSX_ALLOC_SIZE, "I460_TX");</span><br><span style="color: hsl(120, 100%, 40%);">+                if (!msg)</span><br><span style="color: hsl(120, 100%, 40%);">+                     return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+          len = osmo_i460_mux_out(&e1i_ts->i460.i460_ts, msg->data, 160);</span><br><span style="color: hsl(120, 100%, 40%);">+             msgb_put(msg, len);</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span>       default:</span><br><span>             LOGPITS(e1i_ts, DLMI, LOGL_ERROR, "unsupported E1 TS type %u\n", e1i_ts->type);</span><br><span>                 return NULL;</span><br><span>diff --git a/src/input/dahdi.c b/src/input/dahdi.c</span><br><span>index a29a233..e59518a 100644</span><br><span>--- a/src/input/dahdi.c</span><br><span>+++ b/src/input/dahdi.c</span><br><span>@@ -199,7 +199,8 @@</span><br><span>  /* We never include the DAHDI B-Channel FD into the</span><br><span>   * writeset, since it doesn't support poll() based</span><br><span>        * write flow control */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (e1i_ts->type == E1INP_TS_TYPE_TRAU) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (e1i_ts->type == E1INP_TS_TYPE_TRAU ||</span><br><span style="color: hsl(120, 100%, 40%);">+      e1i_ts->type == E1INP_TS_TYPE_I460) {</span><br><span>                 LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "Trying to write TRAU ts\n");</span><br><span>           return 0;</span><br><span>    }</span><br><span>@@ -498,6 +499,7 @@</span><br><span>               * writeset, since it doesn't support poll() based</span><br><span>                * write flow control */</span><br><span>             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case E1INP_TS_TYPE_I460:</span><br><span>     case E1INP_TS_TYPE_RAW:</span><br><span>              if (what & OSMO_FD_EXCEPT)</span><br><span>                       handle_dahdi_exception(e1i_ts);</span><br><span>@@ -685,6 +687,7 @@</span><br><span>                                return ret;</span><br><span>                  break;</span><br><span>               case E1INP_TS_TYPE_TRAU:</span><br><span style="color: hsl(120, 100%, 40%);">+              case E1INP_TS_TYPE_I460:</span><br><span>             case E1INP_TS_TYPE_RAW:</span><br><span>                      /* close/release LAPD instance, if any */</span><br><span>                    if (e1i_ts->lapd) {</span><br><span>diff --git a/src/input/e1d.c b/src/input/e1d.c</span><br><span>index e3a3b82..3ae1d89 100644</span><br><span>--- a/src/input/e1d.c</span><br><span>+++ b/src/input/e1d.c</span><br><span>@@ -310,7 +310,8 @@</span><br><span> e1d_want_write(struct e1inp_ts *e1i_ts)</span><br><span> {</span><br><span>         /* We never include the DAHDI B-Channel FD into the writeset */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (e1i_ts->type == E1INP_TS_TYPE_TRAU) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (e1i_ts->type == E1INP_TS_TYPE_TRAU ||</span><br><span style="color: hsl(120, 100%, 40%);">+      e1i_ts->type == E1INP_TS_TYPE_I460) {</span><br><span>                 LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "Trying to write TRAU ts\n");</span><br><span>           return 0;</span><br><span>    }</span><br><span>@@ -429,6 +430,7 @@</span><br><span>                      bfd->when = OSMO_FD_READ;</span><br><span>                         break;</span><br><span>               case E1INP_TS_TYPE_TRAU:</span><br><span style="color: hsl(120, 100%, 40%);">+              case E1INP_TS_TYPE_I460:</span><br><span>             case E1INP_TS_TYPE_RAW:</span><br><span>                      /* close/release LAPD instance, if any */</span><br><span>                    if (e1i_ts->lapd) {</span><br><span>diff --git a/src/input/misdn.c b/src/input/misdn.c</span><br><span>index 52cd311..0237cb9 100644</span><br><span>--- a/src/input/misdn.c</span><br><span>+++ b/src/input/misdn.c</span><br><span>@@ -213,7 +213,8 @@</span><br><span>        /* We never include the mISDN B-Channel FD into the</span><br><span>   * writeset, since it doesn't support poll() based</span><br><span>        * write flow control */                </span><br><span style="color: hsl(0, 100%, 40%);">-        if (e1i_ts->type == E1INP_TS_TYPE_TRAU)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (e1i_ts->type == E1INP_TS_TYPE_TRAU ||</span><br><span style="color: hsl(120, 100%, 40%);">+      e1i_ts->type == E1INP_TS_TYPE_I460)</span><br><span>           return 0;</span><br><span> </span><br><span>        e1i_ts->driver.misdn.fd.when |= OSMO_FD_WRITE;</span><br><span>@@ -611,6 +612,7 @@</span><br><span>                      bfd->when = OSMO_FD_READ;</span><br><span>                         break;</span><br><span>               case E1INP_TS_TYPE_TRAU:</span><br><span style="color: hsl(120, 100%, 40%);">+              case E1INP_TS_TYPE_I460:</span><br><span>             case E1INP_TS_TYPE_RAW:</span><br><span>                      bfd->fd = socket(PF_ISDN, SOCK_DGRAM, ISDN_P_B_RAW);</span><br><span>                      /* We never include the mISDN B-Channel FD into the</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18933">change 18933</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/libosmo-abis/+/18933"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-abis </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I44da6dfec77ef475adb35001a0e4fa11d549aa02 </div>
<div style="display:none"> Gerrit-Change-Number: 18933 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>