wbokslag has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-tetra/+/29388 )
Change subject: Support parsing of multiple mac resources in the same timeslot ......................................................................
Support parsing of multiple mac resources in the same timeslot
Change-Id: Ic2956a5f10cffe296b76a290a0d16f45461eb2e7 --- M src/lower_mac/tetra_lower_mac.c M src/tetra_gsmtap.c M src/tetra_upper_mac.c 3 files changed, 25 insertions(+), 15 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-tetra refs/changes/88/29388/1
diff --git a/src/lower_mac/tetra_lower_mac.c b/src/lower_mac/tetra_lower_mac.c index bf0896b..2ea03cb 100644 --- a/src/lower_mac/tetra_lower_mac.c +++ b/src/lower_mac/tetra_lower_mac.c @@ -307,10 +307,28 @@ /* FIXME: do something */ break; } - /* send Rx time along with the TMV-UNITDATA.ind primitive */ - memcpy(&tup->tdma_time, &tcd->time, sizeof(tup->tdma_time));
- upper_mac_prim_recv(&ttp->oph, tms); + int parsed = 0; + int offset = 0; + unsigned char *orig_head = msg->head; + unsigned char *orig_tail = msg->tail; + while (parsed != -1 && offset < tbp->type1_bits - 16) { + + /* send Rx time along with the TMV-UNITDATA.ind primitive */ + memcpy(&tup->tdma_time, &tcd->time, sizeof(tup->tdma_time)); + parsed = upper_mac_prim_recv(&ttp->oph, tms); + + /* Increment head and l1h ptrs and reset tail to end of msg (may be altered by removing FCS) */ + offset += parsed; + msg->head = orig_head + offset; + msg->tail = orig_tail; + msg->len = msg->tail - msg->head; + msg->l1h = msg->head; + msg->l2h = 0; + msg->l3h = 0; + msg->l4h = 0; + } + + talloc_free(msg); + talloc_free(ttp); } - - diff --git a/src/tetra_gsmtap.c b/src/tetra_gsmtap.c index 3f872c5..3e06223 100644 --- a/src/tetra_gsmtap.c +++ b/src/tetra_gsmtap.c @@ -64,16 +64,11 @@
int tetra_gsmtap_sendmsg(struct msgb *msg) { - int rc; - if (g_gti) { - rc = gsmtap_sendmsg_free(g_gti, msg); + return gsmtap_sendmsg(g_gti, msg); } else { - msgb_free(msg); - rc = 0; + return 0; } - - return rc; }
int tetra_gsmtap_init(const char *host, uint16_t port) diff --git a/src/tetra_upper_mac.c b/src/tetra_upper_mac.c index a499c66..1a9e3c3 100644 --- a/src/tetra_upper_mac.c +++ b/src/tetra_upper_mac.c @@ -554,8 +554,5 @@ break; }
- talloc_free(op->msg); - talloc_free(op); - return pdu_bits; }