summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocore/gsmtap_util.h5
-rw-r--r--src/gsmtap_util.c31
2 files changed, 28 insertions, 8 deletions
diff --git a/include/osmocore/gsmtap_util.h b/include/osmocore/gsmtap_util.h
index 30fc1267..96449443 100644
--- a/include/osmocore/gsmtap_util.h
+++ b/include/osmocore/gsmtap_util.h
@@ -7,6 +7,11 @@
uint8_t chantype_rsl2gsmtap(uint8_t rsl_chantype, uint8_t rsl_link_id);
/* receive a message from L1/L2 and put it in GSMTAP */
+struct msgb *gsmtap_makemsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type,
+ uint8_t ss, uint32_t fn, int8_t signal_dbm,
+ uint8_t snr, const uint8_t *data, unsigned int len);
+
+/* receive a message from L1/L2 and put it in GSMTAP */
int gsmtap_sendmsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss,
uint32_t fn, int8_t signal_dbm, uint8_t snr,
const uint8_t *data, unsigned int len);
diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 5da43690..abee4dac 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -81,21 +81,17 @@ uint8_t chantype_rsl2gsmtap(uint8_t rsl_chantype, uint8_t link_id)
}
/* receive a message from L1/L2 and put it in GSMTAP */
-int gsmtap_sendmsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss,
- uint32_t fn, int8_t signal_dbm, uint8_t snr,
- const uint8_t *data, unsigned int len)
+struct msgb *gsmtap_makemsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type,
+ uint8_t ss, uint32_t fn, int8_t signal_dbm,
+ uint8_t snr, const uint8_t *data, unsigned int len)
{
struct msgb *msg;
struct gsmtap_hdr *gh;
uint8_t *dst;
- /* gsmtap was never initialized, so don't try to send anything */
- if (gsmtap_bfd.fd == -1)
- return 0;
-
msg = msgb_alloc(sizeof(*gh) + len, "gsmtap_tx");
if (!msg)
- return -ENOMEM;
+ return NULL;
gh = (struct gsmtap_hdr *) msgb_put(msg, sizeof(*gh));
@@ -114,6 +110,25 @@ int gsmtap_sendmsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss,
dst = msgb_put(msg, len);
memcpy(dst, data, len);
+ return msg;
+}
+
+/* receive a message from L1/L2 and put it in GSMTAP */
+int gsmtap_sendmsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss,
+ uint32_t fn, int8_t signal_dbm, uint8_t snr,
+ const uint8_t *data, unsigned int len)
+{
+ struct msgb *msg;
+
+ /* gsmtap was never initialized, so don't try to send anything */
+ if (gsmtap_bfd.fd == -1)
+ return 0;
+
+ msg = gsmtap_makemsg(arfcn, ts, chan_type, ss, fn, signal_dbm,
+ snr, data, len);
+ if (!msg)
+ return -ENOMEM;
+
msgb_enqueue(&gsmtap_txqueue, msg);
gsmtap_bfd.when |= BSC_FD_WRITE;