[gsmtap] add new gsmtap_makemsg() function

This generates a gsmtap message without actually enqueueing to a
bsc_select style queue.
diff --git a/include/osmocore/gsmtap_util.h b/include/osmocore/gsmtap_util.h
index 30fc126..9644944 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 5da4369..abee4da 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -81,21 +81,17 @@
 }
 
 /* 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 @@
 	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;