This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-abis/+/18248 )
Change subject: WIP: unixsocket: Add support for TRAU frames
......................................................................
WIP: unixsocket: Add support for TRAU frames
Change-Id: I4baa02f061cc05c8364dc7169cd9b70f07b0615a
---
M include/osmocom/abis/unixsocket_proto.h
M src/input/unixsocket.c
2 files changed, 52 insertions(+), 18 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/48/18248/1
diff --git a/include/osmocom/abis/unixsocket_proto.h b/include/osmocom/abis/unixsocket_proto.h
index 25718ff..08e511e 100644
--- a/include/osmocom/abis/unixsocket_proto.h
+++ b/include/osmocom/abis/unixsocket_proto.h
@@ -11,6 +11,7 @@
*
* data: | 0x1 | 0x0 | lapd ..|
* control: | 0x1 | 0x1 | control payload |
+ * traffic: | 0x1 | 0x2 | timeslot | rae E1 bitstream data |
*
* Atm there is only one control packet:
* - set_altc (superchannel or timeslot)
@@ -26,6 +27,7 @@
enum {
UNIXSOCKET_PROTO_DATA = 0x0,
UNIXSOCKET_PROTO_CONTROL = 0x1,
+ UNIXSOCKET_PROTO_TRAFFIC = 0x2,
};
#endif /* UNIXSOCKET_PROTO_H */
diff --git a/src/input/unixsocket.c b/src/input/unixsocket.c
index cfb4979..c99b801 100644
--- a/src/input/unixsocket.c
+++ b/src/input/unixsocket.c
@@ -80,6 +80,7 @@
{
struct e1inp_line *line = bfd->data;
struct msgb *msg = msgb_alloc(UNIXSOCKET_ALLOC_SIZE, "UNIXSOCKET TS");
+ uint8_t ts_nr;
uint8_t version;
uint8_t controldata;
int ret;
@@ -117,11 +118,19 @@
switch (controldata) {
case UNIXSOCKET_PROTO_DATA:
+ /* FIXME: don't blindly assume TS0 is the signaling slot */
return e1inp_rx_ts_lapd(&line->ts[0], msg);
case UNIXSOCKET_PROTO_CONTROL:
LOGPIL(line, DLMI, LOGL_ERROR, "received (invalid) control message.");
ret = -1;
break;
+ case UNIXSOCKET_PROTO_TRAFFIC:
+ ts_nr = msgb_pull_u8(msg);
+ if (ts_nr >= line->num_ts) {
+ ret = -1;
+ } else
+ return e1inp_rx_ts(&line->ts[ts_nr], msg, 0, 0);
+ break;
default:
LOGPIL(line, DLMI, LOGL_ERROR, "received invalid message.");
ret = -1;
@@ -143,29 +152,52 @@
static int unixsocket_write_cb(struct osmo_fd *bfd)
{
struct e1inp_line *line = bfd->data;
- struct e1inp_ts *e1i_ts = &line->ts[0];
- struct msgb *msg;
- struct e1inp_sign_link *sign_link;
+ int i;
bfd->when &= ~BSC_FD_WRITE;
- /* get the next msg for this timeslot */
- msg = e1inp_tx_ts(e1i_ts, &sign_link);
- if (!msg) {
- /* no message after tx delay timer */
- LOGPITS(e1i_ts, DLINP, LOGL_INFO, "no message available (line=%p)\n", line);
- return 0;
+ for (i = 0; i < line->num_ts; i++) {
+ struct e1inp_ts *e1i_ts = &line->ts[i];
+ struct e1inp_sign_link *sign_link;
+ struct msgb *msg;
+ int rc;
+
+ /* get the next msg for this timeslot */
+ msg = e1inp_tx_ts(e1i_ts, &sign_link);
+ if (!msg) {
+ /* no message after tx delay timer */
+ LOGPITS(e1i_ts, DLINP, LOGL_INFO, "no message available (line=%p)\n", line);
+ continue;
+ }
+
+ LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "sending: %s (line=%p)\n", msgb_hexdump(msg), line);
+ switch (e1i_ts->type) {
+ case E1INP_TS_TYPE_SIGN:
+ lapd_transmit(e1i_ts->lapd, sign_link->tei, sign_link->sapi, msg);
+ /* set tx delay timer for next event */
+ osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts);
+ osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay);
+ break;
+ case E1INP_TS_TYPE_RAW:
+ msgb_push_u8(msg, i); /* timeslot number */
+ msgb_push_u8(msg, UNIXSOCKET_PROTO_TRAFFIC);
+ msgb_push_u8(msg, UNIXSOCKET_PROTO_VERSION);
+ rc = write(bfd->fd, msg->data, msg->len);
+ if (rc < msg->len) {
+ LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "write returne d%d instead of %d\n",
+ rc, msg->len);
+ msgb_free(msg);
+ return 0;
+ }
+ msgb_free(msg);
+ break;
+ default:
+ LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "unsupported timeslot type %s\n",
+ e1inp_tstype_name(e1i_ts->type));
+ break;
+ }
}
- /* set tx delay timer for next event */
- osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts);
-
- osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay);
-
- LOGPITS(e1i_ts, DLINP, LOGL_DEBUG, "sending: %s (line=%p)\n", msgb_hexdump(msg), line);
- lapd_transmit(e1i_ts->lapd, sign_link->tei,
- sign_link->sapi, msg);
-
return 0;
}
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/18248
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I4baa02f061cc05c8364dc7169cd9b70f07b0615a
Gerrit-Change-Number: 18248
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200514/49b8ece5/attachment.htm>