<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18248">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: unixsocket: Add support for TRAU frames<br><br>Change-Id: I4baa02f061cc05c8364dc7169cd9b70f07b0615a<br>---<br>M include/osmocom/abis/unixsocket_proto.h<br>M src/input/unixsocket.c<br>2 files changed, 52 insertions(+), 18 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/48/18248/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/abis/unixsocket_proto.h b/include/osmocom/abis/unixsocket_proto.h</span><br><span>index 25718ff..08e511e 100644</span><br><span>--- a/include/osmocom/abis/unixsocket_proto.h</span><br><span>+++ b/include/osmocom/abis/unixsocket_proto.h</span><br><span>@@ -11,6 +11,7 @@</span><br><span>  *</span><br><span>  * data:    | 0x1 | 0x0 | lapd ..|</span><br><span>  * control: | 0x1 | 0x1 | control payload |</span><br><span style="color: hsl(120, 100%, 40%);">+ * traffic: | 0x1 | 0x2 | timeslot | rae E1 bitstream data |</span><br><span>  *</span><br><span>  * Atm there is only one control packet:</span><br><span>  *  - set_altc (superchannel or timeslot)</span><br><span>@@ -26,6 +27,7 @@</span><br><span> enum {</span><br><span>     UNIXSOCKET_PROTO_DATA = 0x0,</span><br><span>         UNIXSOCKET_PROTO_CONTROL = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+       UNIXSOCKET_PROTO_TRAFFIC = 0x2,</span><br><span> };</span><br><span> </span><br><span> #endif /* UNIXSOCKET_PROTO_H */</span><br><span>diff --git a/src/input/unixsocket.c b/src/input/unixsocket.c</span><br><span>index cfb4979..c99b801 100644</span><br><span>--- a/src/input/unixsocket.c</span><br><span>+++ b/src/input/unixsocket.c</span><br><span>@@ -80,6 +80,7 @@</span><br><span> {</span><br><span>   struct e1inp_line *line = bfd->data;</span><br><span>      struct msgb *msg = msgb_alloc(UNIXSOCKET_ALLOC_SIZE, "UNIXSOCKET TS");</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t ts_nr;</span><br><span>       uint8_t version;</span><br><span>     uint8_t controldata;</span><br><span>         int ret;</span><br><span>@@ -117,11 +118,19 @@</span><br><span> </span><br><span>         switch (controldata) {</span><br><span>       case UNIXSOCKET_PROTO_DATA:</span><br><span style="color: hsl(120, 100%, 40%);">+           /* FIXME: don't blindly assume TS0 is the signaling slot */</span><br><span>              return e1inp_rx_ts_lapd(&line->ts[0], msg);</span><br><span>   case UNIXSOCKET_PROTO_CONTROL:</span><br><span>               LOGPIL(line, DLMI, LOGL_ERROR, "received (invalid) control message.");</span><br><span>             ret = -1;</span><br><span>            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case UNIXSOCKET_PROTO_TRAFFIC:</span><br><span style="color: hsl(120, 100%, 40%);">+                ts_nr = msgb_pull_u8(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (ts_nr >= line->num_ts) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    ret = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else</span><br><span style="color: hsl(120, 100%, 40%);">+                        return e1inp_rx_ts(&line->ts[ts_nr], msg, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       default:</span><br><span>             LOGPIL(line, DLMI, LOGL_ERROR, "received invalid message.");</span><br><span>               ret = -1;</span><br><span>@@ -143,29 +152,52 @@</span><br><span> static int unixsocket_write_cb(struct osmo_fd *bfd)</span><br><span> {</span><br><span>        struct e1inp_line *line = bfd->data;</span><br><span style="color: hsl(0, 100%, 40%);">- struct e1inp_ts *e1i_ts = &line->ts[0];</span><br><span style="color: hsl(0, 100%, 40%);">-  struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct e1inp_sign_link *sign_link;</span><br><span style="color: hsl(120, 100%, 40%);">+    int i;</span><br><span> </span><br><span>   bfd->when &= ~BSC_FD_WRITE;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* get the next msg for this timeslot */</span><br><span style="color: hsl(0, 100%, 40%);">-        msg = e1inp_tx_ts(e1i_ts, &sign_link);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!msg) {</span><br><span style="color: hsl(0, 100%, 40%);">-             /* no message after tx delay timer */</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGPITS(e1i_ts, DLINP, LOGL_INFO, "no message available (line=%p)\n", line);</span><br><span style="color: hsl(0, 100%, 40%);">-          return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i = 0; i < line->num_ts; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+            struct e1inp_ts *e1i_ts = &line->ts[i];</span><br><span style="color: hsl(120, 100%, 40%);">+                struct e1inp_sign_link *sign_link;</span><br><span style="color: hsl(120, 100%, 40%);">+            struct msgb *msg;</span><br><span style="color: hsl(120, 100%, 40%);">+             int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* get the next msg for this timeslot */</span><br><span style="color: hsl(120, 100%, 40%);">+              msg = e1inp_tx_ts(e1i_ts, &sign_link);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (!msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* no message after tx delay timer */</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGPITS(e1i_ts, DLINP, LOGL_INFO, "no message available (line=%p)\n", line);</span><br><span style="color: hsl(120, 100%, 40%);">+                        continue;</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%);">+           LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "sending: %s (line=%p)\n", msgb_hexdump(msg), line);</span><br><span style="color: hsl(120, 100%, 40%);">+             switch (e1i_ts->type) {</span><br><span style="color: hsl(120, 100%, 40%);">+            case E1INP_TS_TYPE_SIGN:</span><br><span style="color: hsl(120, 100%, 40%);">+                      lapd_transmit(e1i_ts->lapd, sign_link->tei, sign_link->sapi, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* set tx delay timer for next event */</span><br><span style="color: hsl(120, 100%, 40%);">+                       osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay);</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case E1INP_TS_TYPE_RAW:</span><br><span style="color: hsl(120, 100%, 40%);">+                       msgb_push_u8(msg, i); /* timeslot number */</span><br><span style="color: hsl(120, 100%, 40%);">+                   msgb_push_u8(msg, UNIXSOCKET_PROTO_TRAFFIC);</span><br><span style="color: hsl(120, 100%, 40%);">+                  msgb_push_u8(msg, UNIXSOCKET_PROTO_VERSION);</span><br><span style="color: hsl(120, 100%, 40%);">+                  rc = write(bfd->fd, msg->data, msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (rc < msg->len) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "write returne d%d instead of %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                     rc, msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+                             msgb_free(msg);</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%);">+                     msgb_free(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "unsupported timeslot type %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                e1inp_tstype_name(e1i_ts->type));</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* set tx delay timer for next event */</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "sending: %s (line=%p)\n", msgb_hexdump(msg), line);</span><br><span style="color: hsl(0, 100%, 40%);">-       lapd_transmit(e1i_ts->lapd, sign_link->tei,</span><br><span style="color: hsl(0, 100%, 40%);">-                       sign_link->sapi, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return 0;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18248">change 18248</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/+/18248"/><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: I4baa02f061cc05c8364dc7169cd9b70f07b0615a </div>
<div style="display:none"> Gerrit-Change-Number: 18248 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>