blob: 59b81e55385fab87c57956afd9ca966f01633aa4 [file] [log] [blame]
Sylvain Munaut12ba7782014-06-16 10:13:40 +02001#pragma once
Harald Weltee779c362010-06-29 20:51:13 +02002
3#include <stdint.h>
Harald Welte33cb71a2011-05-21 18:54:32 +02004#include <osmocom/core/write_queue.h>
5#include <osmocom/core/select.h>
Harald Weltee779c362010-06-29 20:51:13 +02006
Harald Welte47379ca2011-08-17 16:35:24 +02007/*! \defgroup gsmtap GSMTAP
8 * @{
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02009 * \file gsmtap_util.h */
Harald Welte47379ca2011-08-17 16:35:24 +020010
Harald Weltee779c362010-06-29 20:51:13 +020011uint8_t chantype_rsl2gsmtap(uint8_t rsl_chantype, uint8_t rsl_link_id);
12
Sylvain Munaut15ae7152011-09-26 13:05:07 +020013struct msgb *gsmtap_makemsg_ex(uint8_t type, uint16_t arfcn, uint8_t ts, uint8_t chan_type,
14 uint8_t ss, uint32_t fn, int8_t signal_dbm,
15 uint8_t snr, const uint8_t *data, unsigned int len);
16
Harald Weltee34a9402010-06-29 22:31:21 +020017struct msgb *gsmtap_makemsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type,
18 uint8_t ss, uint32_t fn, int8_t signal_dbm,
19 uint8_t snr, const uint8_t *data, unsigned int len);
20
Neels Hofmeyr87e45502017-06-20 00:17:59 +020021/*! one gsmtap instance */
Harald Welte33cb71a2011-05-21 18:54:32 +020022struct gsmtap_inst {
Neels Hofmeyr87e45502017-06-20 00:17:59 +020023 int ofd_wq_mode; /*!< wait queue mode? */
24 struct osmo_wqueue wq; /*!< the wait queue */
25 struct osmo_fd sink_ofd;/*!< file descriptor */
Harald Welte33cb71a2011-05-21 18:54:32 +020026};
Harald Weltee779c362010-06-29 20:51:13 +020027
Neels Hofmeyr87e45502017-06-20 00:17:59 +020028/*! obtain the file descriptor associated with a gsmtap instance
Harald Welte2d2e2cc2016-04-25 12:11:20 +020029 * \param[in] gti GSMTAP instance
30 * \returns file descriptor of GSMTAP instance */
Harald Welte33cb71a2011-05-21 18:54:32 +020031static inline int gsmtap_inst_fd(struct gsmtap_inst *gti)
32{
33 return gti->wq.bfd.fd;
34}
Harald Weltee779c362010-06-29 20:51:13 +020035
Harald Welte33cb71a2011-05-21 18:54:32 +020036int gsmtap_source_init_fd(const char *host, uint16_t port);
37
Harald Welte33cb71a2011-05-21 18:54:32 +020038int gsmtap_source_add_sink_fd(int gsmtap_fd);
39
Harald Welte33cb71a2011-05-21 18:54:32 +020040struct gsmtap_inst *gsmtap_source_init(const char *host, uint16_t port,
41 int ofd_wq_mode);
42
Harald Welte33cb71a2011-05-21 18:54:32 +020043int gsmtap_source_add_sink(struct gsmtap_inst *gti);
44
Harald Welte33cb71a2011-05-21 18:54:32 +020045int gsmtap_sendmsg(struct gsmtap_inst *gti, struct msgb *msg);
46
Sylvain Munaut15ae7152011-09-26 13:05:07 +020047int gsmtap_send_ex(struct gsmtap_inst *gti, uint8_t type, uint16_t arfcn, uint8_t ts,
48 uint8_t chan_type, uint8_t ss, uint32_t fn,
49 int8_t signal_dbm, uint8_t snr, const uint8_t *data,
50 unsigned int len);
51
Harald Welte33cb71a2011-05-21 18:54:32 +020052int gsmtap_send(struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts,
53 uint8_t chan_type, uint8_t ss, uint32_t fn,
54 int8_t signal_dbm, uint8_t snr, const uint8_t *data,
55 unsigned int len);
Harald Welted58ba462011-04-27 10:57:49 +020056
Katerina Barone-Adesic28c6a02013-02-15 13:27:59 +010057/*! @} */