libosmocore  1.5.1
Osmocom core library
GSMTAP

Files

file  gsmtap_util.h
 
file  gsmtap_util.c
 

Data Structures

struct  gsmtap_inst
 one gsmtap instance More...
 

Functions

uint8_t chantype_rsl2gsmtap2 (uint8_t rsl_chantype, uint8_t link_id, bool user_plane)
 convert RSL channel number to GSMTAP channel type More...
 
uint8_t chantype_rsl2gsmtap (uint8_t rsl_chantype, uint8_t link_id)
 convert RSL channel number to GSMTAP channel type More...
 
void chantype_gsmtap2rsl (uint8_t gsmtap_chantype, uint8_t *rsl_chantype, uint8_t *link_id)
 convert GSMTAP channel type to RSL channel number + Link ID More...
 
struct msgbgsmtap_makemsg_ex (uint8_t type, uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss, uint32_t fn, int8_t signal_dbm, int8_t snr, const uint8_t *data, unsigned int len)
 create an arbitrary type GSMTAP message More...
 
struct msgbgsmtap_makemsg (uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss, uint32_t fn, int8_t signal_dbm, int8_t snr, const uint8_t *data, unsigned int len)
 create L1/L2 data and put it into GSMTAP More...
 
static int gsmtap_inst_fd (struct gsmtap_inst *gti)
 obtain the file descriptor associated with a gsmtap instance More...
 
int gsmtap_source_init_fd (const char *host, uint16_t port)
 Create a new (sending) GSMTAP source socket. More...
 
int gsmtap_source_add_sink_fd (int gsmtap_fd)
 Add a local sink to an existing GSMTAP source and return fd. More...
 
struct gsmtap_instgsmtap_source_init (const char *host, uint16_t port, int ofd_wq_mode)
 Open GSMTAP source socket, connect and register osmo_fd. More...
 
int gsmtap_source_add_sink (struct gsmtap_inst *gti)
 Add a local sink to an existing GSMTAP source and return fd. More...
 
int gsmtap_sendmsg (struct gsmtap_inst *gti, struct msgb *msg)
 Send a Message buffers through a GSMTAP source. More...
 
int gsmtap_send_ex (struct gsmtap_inst *gti, uint8_t type, uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss, uint32_t fn, int8_t signal_dbm, int8_t snr, const uint8_t *data, unsigned int len)
 send an arbitrary type through GSMTAP. More...
 
int gsmtap_send (struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts, uint8_t chan_type, uint8_t ss, uint32_t fn, int8_t signal_dbm, int8_t snr, const uint8_t *data, unsigned int len)
 send a message from L1/L2 through GSMTAP. More...
 
static int gsmtap_wq_w_cb (struct osmo_fd *ofd, struct msgb *msg)
 
static int gsmtap_sink_fd_cb (struct osmo_fd *fd, unsigned int flags)
 

Variables

const struct value_string gsmtap_gsm_channel_names []
 
const struct value_string gsmtap_type_names []
 
const struct value_string gsmtap_gsm_channel_names []
 
const struct value_string gsmtap_type_names []
 

Detailed Description

GSMTAP utility routines. Encapsulates GSM messages over UDP.

Function Documentation

◆ chantype_gsmtap2rsl()

void chantype_gsmtap2rsl ( uint8_t  gsmtap_chantype,
uint8_t *  rsl_chantype,
uint8_t *  link_id 
)

◆ chantype_rsl2gsmtap()

uint8_t chantype_rsl2gsmtap ( uint8_t  rsl_chantype,
uint8_t  link_id 
)

convert RSL channel number to GSMTAP channel type

Parameters
[in]rsl_chantypeRSL channel type
[in]link_idRSL link identifier
Returns
GSMTAP channel type

References chantype_rsl2gsmtap2(), and link_id.

◆ chantype_rsl2gsmtap2()

uint8_t chantype_rsl2gsmtap2 ( uint8_t  rsl_chantype,
uint8_t  link_id,
bool  user_plane 
)

◆ gsmtap_inst_fd()

static int gsmtap_inst_fd ( struct gsmtap_inst gti)
inlinestatic

obtain the file descriptor associated with a gsmtap instance

Parameters
[in]gtiGSMTAP instance
Returns
file descriptor of GSMTAP instance

References osmo_wqueue::bfd, osmo_fd::fd, and gsmtap_inst::wq.

Referenced by gsmtap_sendmsg(), and gsmtap_source_add_sink().

◆ gsmtap_makemsg()

struct msgb * gsmtap_makemsg ( uint16_t  arfcn,
uint8_t  ts,
uint8_t  chan_type,
uint8_t  ss,
uint32_t  fn,
int8_t  signal_dbm,
int8_t  snr,
const uint8_t *  data,
unsigned int  len 
)

create L1/L2 data and put it into GSMTAP

Parameters
[in]arfcnGSM ARFCN (Channel Number)
[in]tsGSM time slot
[in]chan_typeChannel Type
[in]ssSub-slot
[in]fnGSM Frame Number
[in]signal_dbmSignal Strength (dBm)
[in]snrSignal/Noise Ratio (SNR)
[in]dataPointer to data buffer
[in]lenLength of data
Returns
message buffer or NULL in case of error

This function will allocate a new msgb and fill it with a GSMTAP header containing the information

References arfcn, data, gsmtap_makemsg_ex(), GSMTAP_TYPE_UM, len(), signal_dbm, and ts.

◆ gsmtap_makemsg_ex()

struct msgb * gsmtap_makemsg_ex ( uint8_t  type,
uint16_t  arfcn,
uint8_t  ts,
uint8_t  chan_type,
uint8_t  ss,
uint32_t  fn,
int8_t  signal_dbm,
int8_t  snr,
const uint8_t *  data,
unsigned int  len 
)

create an arbitrary type GSMTAP message

Parameters
[in]typeThe GSMTAP_TYPE_xxx constant of the message to create
[in]arfcnGSM ARFCN (Channel Number)
[in]tsGSM time slot
[in]chan_typeChannel Type
[in]ssSub-slot
[in]fnGSM Frame Number
[in]signal_dbmSignal Strength (dBm)
[in]snrSignal/Noise Ratio (SNR)
[in]dataPointer to data buffer
[in]lenLength of data
Returns
dynamically allocated message buffer containing data

This function will allocate a new msgb and fill it with a GSMTAP header containing the information

References gsmtap_hdr::antenna_nr, arfcn, gsmtap_hdr::arfcn, data, gsmtap_hdr::frame_number, GSMTAP_VERSION, gsmtap_hdr::hdr_len, len(), msg, msgb_alloc(), msgb_put(), osmo_htonl, osmo_htons, signal_dbm, gsmtap_hdr::signal_dbm, gsmtap_hdr::snr_db, gsmtap_hdr::sub_slot, gsmtap_hdr::sub_type, gsmtap_hdr::timeslot, ts, type, gsmtap_hdr::type, and gsmtap_hdr::version.

Referenced by gsmtap_makemsg(), and gsmtap_send_ex().

◆ gsmtap_send()

int gsmtap_send ( struct gsmtap_inst gti,
uint16_t  arfcn,
uint8_t  ts,
uint8_t  chan_type,
uint8_t  ss,
uint32_t  fn,
int8_t  signal_dbm,
int8_t  snr,
const uint8_t *  data,
unsigned int  len 
)

send a message from L1/L2 through GSMTAP.

See gsmtap_makemsg for arguments

References arfcn, data, gsmtap_send_ex(), GSMTAP_TYPE_UM, len(), signal_dbm, and ts.

◆ gsmtap_send_ex()

int gsmtap_send_ex ( struct gsmtap_inst gti,
uint8_t  type,
uint16_t  arfcn,
uint8_t  ts,
uint8_t  chan_type,
uint8_t  ss,
uint32_t  fn,
int8_t  signal_dbm,
int8_t  snr,
const uint8_t *  data,
unsigned int  len 
)

send an arbitrary type through GSMTAP.

See gsmtap_makemsg_ex for arguments

References arfcn, data, gsmtap_makemsg_ex(), gsmtap_sendmsg(), len(), msg, msgb_free(), signal_dbm, ts, and type.

Referenced by gsmtap_send().

◆ gsmtap_sendmsg()

int gsmtap_sendmsg ( struct gsmtap_inst gti,
struct msgb msg 
)

Send a Message buffers through a GSMTAP source.

Parameters
[in]gtiGSMTAP instance
[in]msgmessage buffer
Returns
0 in case of success; negative in case of error NOTE: in case of nonzero return value, the caller must free the msg! (This enables the caller to attempt re-sending the message.) If 0 is returned, the msgb was freed by this function.

References gsmtap_inst_fd(), msg, msgb_free(), gsmtap_inst::ofd_wq_mode, osmo_wqueue_enqueue(), and gsmtap_inst::wq.

Referenced by _gsmtap_raw_output(), and gsmtap_send_ex().

◆ gsmtap_sink_fd_cb()

static int gsmtap_sink_fd_cb ( struct osmo_fd fd,
unsigned int  flags 
)
static

References osmo_fd::fd, flags, and OSMO_FD_READ.

Referenced by gsmtap_source_add_sink().

◆ gsmtap_source_add_sink()

int gsmtap_source_add_sink ( struct gsmtap_inst gti)

Add a local sink to an existing GSMTAP source and return fd.

Parameters
[in]gtiexisting GSMTAP source
Returns
file descriptor of locally bound receive socket

In case the GSMTAP socket is connected to a local destination IP/port, this function creates a corresponding receiving socket bound to that destination IP + port.

In case the gsmtap socket is not connected to a local IP/port, or creation of the receiving socket fails, a negative error code is returned.

The file descriptor of the receiving socket is automatically added to the libosmocore select() handling.

References osmo_fd::cb, osmo_fd::fd, gsmtap_inst_fd(), gsmtap_sink_fd_cb(), gsmtap_source_add_sink_fd(), gsmtap_inst::ofd_wq_mode, OSMO_FD_READ, osmo_fd_register(), gsmtap_inst::sink_ofd, and osmo_fd::when.

Referenced by log_target_create_gsmtap().

◆ gsmtap_source_add_sink_fd()

int gsmtap_source_add_sink_fd ( int  gsmtap_fd)

Add a local sink to an existing GSMTAP source and return fd.

Parameters
[in]gsmtap_fdfile descriptor of the gsmtap socket
Returns
file descriptor of locally bound receive socket

In case the GSMTAP socket is connected to a local destination IP/port, this function creates a corresponding receiving socket bound to that destination IP + port.

In case the gsmtap socket is not connected to a local IP/port, or creation of the receiving socket fails, a negative error code is returned.

References OSMO_SOCK_F_BIND, OSMO_SOCK_F_UDP_REUSEADDR, osmo_sock_init_sa(), and osmo_sockaddr_is_local().

Referenced by gsmtap_source_add_sink().

◆ gsmtap_source_init()

struct gsmtap_inst * gsmtap_source_init ( const char *  host,
uint16_t  port,
int  ofd_wq_mode 
)

Open GSMTAP source socket, connect and register osmo_fd.

Parameters
[in]hosthost name or IP address in string format
[in]portUDP port number in host byte order
[in]ofd_wq_modeRegister osmo_wqueue (1) or not (0)
Returns
callee-allocated gsmtap_inst

Open GSMTAP source (sending) socket, connect it to host/port, allocate 'struct gsmtap_inst' and optionally osmo_fd/osmo_wqueue registration.

Referenced by log_target_create_gsmtap().

◆ gsmtap_source_init_fd()

int gsmtap_source_init_fd ( const char *  host,
uint16_t  port 
)

Create a new (sending) GSMTAP source socket.

Parameters
[in]hosthost name or IP address in string format
[in]portUDP port number in host byte order
Returns
file descriptor of the new socket

Opens a GSMTAP source (sending) socket, conncet it to host/port and return resulting fd. If host is NULL, the destination address will be localhost. If port is 0, the default GSMTAP_UDP_PORT will be used.

References GSMTAP_UDP_PORT, OSMO_SOCK_F_CONNECT, and osmo_sock_init().

◆ gsmtap_wq_w_cb()

static int gsmtap_wq_w_cb ( struct osmo_fd ofd,
struct msgb msg 
)
static

References osmo_fd::fd, and msg.

Variable Documentation

◆ gsmtap_gsm_channel_names [1/2]

const struct value_string gsmtap_gsm_channel_names[]

◆ gsmtap_gsm_channel_names [2/2]

const struct value_string gsmtap_gsm_channel_names[]
Initial value:
= {
{ GSMTAP_CHANNEL_UNKNOWN, "UNKNOWN" },
{ GSMTAP_CHANNEL_BCCH, "BCCH" },
{ GSMTAP_CHANNEL_CCCH, "CCCH" },
{ GSMTAP_CHANNEL_RACH, "RACH" },
{ GSMTAP_CHANNEL_AGCH, "AGCH" },
{ GSMTAP_CHANNEL_PCH, "PCH" },
{ GSMTAP_CHANNEL_SDCCH, "SDCCH" },
{ GSMTAP_CHANNEL_SDCCH4, "SDCCH/4" },
{ GSMTAP_CHANNEL_SDCCH8, "SDCCH/8" },
{ GSMTAP_CHANNEL_FACCH_F, "FACCH/F" },
{ GSMTAP_CHANNEL_FACCH_H, "FACCH/H" },
{ GSMTAP_CHANNEL_PACCH, "PACCH" },
{ GSMTAP_CHANNEL_CBCH52, "CBCH" },
{ GSMTAP_CHANNEL_PDCH, "PDCH" } ,
{ GSMTAP_CHANNEL_PTCCH, "PTTCH" },
{ GSMTAP_CHANNEL_CBCH51, "CBCH" },
{ GSMTAP_CHANNEL_VOICE_F, "TCH/F" },
{ GSMTAP_CHANNEL_VOICE_H, "TCH/H" },
{ 0, NULL }
}

◆ gsmtap_type_names [1/2]

const struct value_string gsmtap_type_names[]

◆ gsmtap_type_names [2/2]

const struct value_string gsmtap_type_names[]
Initial value:
= {
{ GSMTAP_TYPE_UM, "GSM Um (MS<->BTS)" },
{ GSMTAP_TYPE_ABIS, "GSM Abis (BTS<->BSC)" },
{ GSMTAP_TYPE_UM_BURST, "GSM Um burst (MS<->BTS)" },
{ GSMTAP_TYPE_SIM, "SIM Card" },
{ GSMTAP_TYPE_TETRA_I1, "TETRA V+D" },
{ GSMTAP_TYPE_TETRA_I1_BURST, "TETRA bursts" },
{ GSMTAP_TYPE_WMX_BURST, "WiMAX burst" },
{ GSMTAP_TYPE_GMR1_UM, "GMR-1 air interfeace (MES-MS<->GTS)"},
{ GSMTAP_TYPE_UMTS_RLC_MAC, "UMTS RLC/MAC" },
{ GSMTAP_TYPE_UMTS_RRC, "UMTS RRC" },
{ GSMTAP_TYPE_LTE_RRC, "LTE RRC" },
{ GSMTAP_TYPE_LTE_MAC, "LTE MAC" },
{ GSMTAP_TYPE_LTE_MAC_FRAMED, "LTE MAC with context hdr" },
{ GSMTAP_TYPE_OSMOCORE_LOG, "libosmocore logging" },
{ GSMTAP_TYPE_QC_DIAG, "Qualcomm DIAG" },
{ 0, NULL }
}
GSMTAP_CHANNEL_FACCH_H
#define GSMTAP_CHANNEL_FACCH_H
Definition: gsmtap.h:87
GSMTAP_TYPE_LTE_MAC_FRAMED
#define GSMTAP_TYPE_LTE_MAC_FRAMED
Definition: gsmtap.h:47
GSMTAP_CHANNEL_FACCH_F
#define GSMTAP_CHANNEL_FACCH_F
Definition: gsmtap.h:86
GSMTAP_TYPE_ABIS
#define GSMTAP_TYPE_ABIS
Definition: gsmtap.h:34
GSMTAP_CHANNEL_SDCCH4
#define GSMTAP_CHANNEL_SDCCH4
Definition: gsmtap.h:84
GSMTAP_CHANNEL_SDCCH8
#define GSMTAP_CHANNEL_SDCCH8
Definition: gsmtap.h:85
GSMTAP_TYPE_QC_DIAG
#define GSMTAP_TYPE_QC_DIAG
Definition: gsmtap.h:49
GSMTAP_CHANNEL_PTCCH
#define GSMTAP_CHANNEL_PTCCH
Definition: gsmtap.h:93
GSMTAP_TYPE_UM
#define GSMTAP_TYPE_UM
Definition: gsmtap.h:33
GSMTAP_CHANNEL_AGCH
#define GSMTAP_CHANNEL_AGCH
Definition: gsmtap.h:81
GSMTAP_CHANNEL_SDCCH
#define GSMTAP_CHANNEL_SDCCH
Definition: gsmtap.h:83
GSMTAP_CHANNEL_PDCH
#define GSMTAP_CHANNEL_PDCH
Definition: gsmtap.h:92
GSMTAP_CHANNEL_RACH
#define GSMTAP_CHANNEL_RACH
Definition: gsmtap.h:80
GSMTAP_TYPE_LTE_MAC
#define GSMTAP_TYPE_LTE_MAC
Definition: gsmtap.h:46
GSMTAP_TYPE_UMTS_RLC_MAC
#define GSMTAP_TYPE_UMTS_RLC_MAC
Definition: gsmtap.h:43
GSMTAP_TYPE_TETRA_I1_BURST
#define GSMTAP_TYPE_TETRA_I1_BURST
Definition: gsmtap.h:38
GSMTAP_TYPE_OSMOCORE_LOG
#define GSMTAP_TYPE_OSMOCORE_LOG
Definition: gsmtap.h:48
GSMTAP_CHANNEL_VOICE_H
#define GSMTAP_CHANNEL_VOICE_H
Definition: gsmtap.h:96
GSMTAP_CHANNEL_BCCH
#define GSMTAP_CHANNEL_BCCH
Definition: gsmtap.h:78
GSMTAP_CHANNEL_CBCH51
#define GSMTAP_CHANNEL_CBCH51
Definition: gsmtap.h:94
GSMTAP_TYPE_WMX_BURST
#define GSMTAP_TYPE_WMX_BURST
Definition: gsmtap.h:39
GSMTAP_CHANNEL_ACCH
#define GSMTAP_CHANNEL_ACCH
Definition: gsmtap.h:107
GSMTAP_TYPE_SIM
#define GSMTAP_TYPE_SIM
Definition: gsmtap.h:36
GSMTAP_CHANNEL_PACCH
#define GSMTAP_CHANNEL_PACCH
Definition: gsmtap.h:88
GSMTAP_CHANNEL_CCCH
#define GSMTAP_CHANNEL_CCCH
Definition: gsmtap.h:79
GSMTAP_CHANNEL_CBCH52
#define GSMTAP_CHANNEL_CBCH52
Definition: gsmtap.h:89
GSMTAP_CHANNEL_UNKNOWN
#define GSMTAP_CHANNEL_UNKNOWN
Definition: gsmtap.h:77
GSMTAP_TYPE_GMR1_UM
#define GSMTAP_TYPE_GMR1_UM
Definition: gsmtap.h:42
GSMTAP_CHANNEL_PCH
#define GSMTAP_CHANNEL_PCH
Definition: gsmtap.h:82
GSMTAP_CHANNEL_VOICE_F
#define GSMTAP_CHANNEL_VOICE_F
Definition: gsmtap.h:95
GSMTAP_TYPE_UM_BURST
#define GSMTAP_TYPE_UM_BURST
Definition: gsmtap.h:35
GSMTAP_TYPE_LTE_RRC
#define GSMTAP_TYPE_LTE_RRC
Definition: gsmtap.h:45
GSMTAP_TYPE_UMTS_RRC
#define GSMTAP_TYPE_UMTS_RRC
Definition: gsmtap.h:44
GSMTAP_TYPE_TETRA_I1
#define GSMTAP_TYPE_TETRA_I1
Definition: gsmtap.h:37