blob: d583401ddcc01ecd259d9b28b512f8e882bcaac7 [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 Welte67733042020-03-08 17:21:29 +010011uint8_t chantype_rsl2gsmtap2(uint8_t rsl_chantype, uint8_t rsl_link_id, bool user_plane);
12
Harald Weltee779c362010-06-29 20:51:13 +020013uint8_t chantype_rsl2gsmtap(uint8_t rsl_chantype, uint8_t rsl_link_id);
Harald Welte67733042020-03-08 17:21:29 +010014 OSMO_DEPRECATED("Use chantype_rsl2gsmtap2() instead")
15
Harald Welte93713a52017-07-12 23:43:40 +020016void chantype_gsmtap2rsl(uint8_t gsmtap_chantype, uint8_t *rsl_chantype, uint8_t *link_id);
Harald Weltee779c362010-06-29 20:51:13 +020017
Sylvain Munaut15ae7152011-09-26 13:05:07 +020018struct msgb *gsmtap_makemsg_ex(uint8_t type, uint16_t arfcn, uint8_t ts, uint8_t chan_type,
19 uint8_t ss, uint32_t fn, int8_t signal_dbm,
20 uint8_t snr, const uint8_t *data, unsigned int len);
21
Harald Weltee34a9402010-06-29 22:31:21 +020022struct msgb *gsmtap_makemsg(uint16_t arfcn, uint8_t ts, uint8_t chan_type,
23 uint8_t ss, uint32_t fn, int8_t signal_dbm,
24 uint8_t snr, const uint8_t *data, unsigned int len);
25
Neels Hofmeyr87e45502017-06-20 00:17:59 +020026/*! one gsmtap instance */
Harald Welte33cb71a2011-05-21 18:54:32 +020027struct gsmtap_inst {
Neels Hofmeyr87e45502017-06-20 00:17:59 +020028 int ofd_wq_mode; /*!< wait queue mode? */
29 struct osmo_wqueue wq; /*!< the wait queue */
30 struct osmo_fd sink_ofd;/*!< file descriptor */
Harald Welte33cb71a2011-05-21 18:54:32 +020031};
Harald Weltee779c362010-06-29 20:51:13 +020032
Neels Hofmeyr87e45502017-06-20 00:17:59 +020033/*! obtain the file descriptor associated with a gsmtap instance
Harald Welte2d2e2cc2016-04-25 12:11:20 +020034 * \param[in] gti GSMTAP instance
35 * \returns file descriptor of GSMTAP instance */
Harald Welte33cb71a2011-05-21 18:54:32 +020036static inline int gsmtap_inst_fd(struct gsmtap_inst *gti)
37{
38 return gti->wq.bfd.fd;
39}
Harald Weltee779c362010-06-29 20:51:13 +020040
Harald Welte33cb71a2011-05-21 18:54:32 +020041int gsmtap_source_init_fd(const char *host, uint16_t port);
42
Harald Welte33cb71a2011-05-21 18:54:32 +020043int gsmtap_source_add_sink_fd(int gsmtap_fd);
44
Harald Welte33cb71a2011-05-21 18:54:32 +020045struct gsmtap_inst *gsmtap_source_init(const char *host, uint16_t port,
46 int ofd_wq_mode);
47
Harald Welte33cb71a2011-05-21 18:54:32 +020048int gsmtap_source_add_sink(struct gsmtap_inst *gti);
49
Harald Welte33cb71a2011-05-21 18:54:32 +020050int gsmtap_sendmsg(struct gsmtap_inst *gti, struct msgb *msg);
51
Sylvain Munaut15ae7152011-09-26 13:05:07 +020052int gsmtap_send_ex(struct gsmtap_inst *gti, uint8_t type, 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);
56
Harald Welte33cb71a2011-05-21 18:54:32 +020057int gsmtap_send(struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts,
58 uint8_t chan_type, uint8_t ss, uint32_t fn,
59 int8_t signal_dbm, uint8_t snr, const uint8_t *data,
60 unsigned int len);
Harald Welted58ba462011-04-27 10:57:49 +020061
Harald Welteaa3ba462017-07-13 00:01:02 +020062extern const struct value_string gsmtap_gsm_channel_names[];
63extern const struct value_string gsmtap_type_names[];
64
Katerina Barone-Adesic28c6a02013-02-15 13:27:59 +010065/*! @} */