[gsmtap] add new gsmtap_makemsg() function

This generates a gsmtap message without actually enqueueing to a
bsc_select style queue.
This commit is contained in:
Harald Welte 2010-06-29 22:31:21 +02:00
parent e779c364ac
commit e34a940542
2 changed files with 28 additions and 8 deletions

View File

@ -6,6 +6,11 @@
/* convert RSL channel number to GSMTAP channel type */
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,

View File

@ -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;