libosmo-netif  1.2.0.67-9ee4
Osmocom network interface library
Osmocom Datagram Socket

Files

file  datagram.c
 Osmocom datagram socket helpers.
 

Data Structures

struct  osmo_dgram_tx
 
struct  osmo_dgram_rx
 
struct  osmo_dgram
 

Macros

#define OSMO_DGRAM_CLI_F_RECONF   (1 << 0)
 
#define OSMO_DGRAM_RX_F_RECONF   (1 << 0)
 

Functions

void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
 Close an Osmocom Datagram Transmitter. More...
 
static int osmo_dgram_tx_write (struct osmo_dgram_tx *conn)
 
static int osmo_dgram_tx_fd_cb (struct osmo_fd *ofd, unsigned int what)
 
struct osmo_dgram_txosmo_dgram_tx_create (void *ctx)
 Create an Osmocom datagram transmitter. More...
 
void osmo_dgram_tx_set_addr (struct osmo_dgram_tx *conn, const char *addr)
 Set the remote address to which we transmit. More...
 
void osmo_dgram_tx_set_port (struct osmo_dgram_tx *conn, uint16_t port)
 Set the remote port to which we transmit. More...
 
void osmo_dgram_tx_set_local_addr (struct osmo_dgram_tx *conn, const char *addr)
 Set the local address from which we transmit. More...
 
void osmo_dgram_tx_set_local_port (struct osmo_dgram_tx *conn, uint16_t port)
 Set the local port from which we transmit. More...
 
void osmo_dgram_tx_set_data (struct osmo_dgram_tx *conn, void *data)
 Set application private data of the datagram transmitter. More...
 
void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
 Destroy a Osmocom datagram transmitter. More...
 
int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
 Open connection of an Osmocom datagram transmitter. More...
 
void osmo_dgram_tx_send (struct osmo_dgram_tx *conn, struct msgb *msg)
 Enqueue data to be sent via an Osmocom datagram transmitter. More...
 
int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
 Receive data via Osmocom datagram receiver. More...
 
static void osmo_dgram_rx_read (struct osmo_dgram_rx *conn)
 
static int osmo_dgram_rx_cb (struct osmo_fd *ofd, unsigned int what)
 
struct osmo_dgram_rxosmo_dgram_rx_create (void *ctx)
 Create an Osmocom datagram receiver. More...
 
void osmo_dgram_rx_set_addr (struct osmo_dgram_rx *conn, const char *addr)
 Set the local address to which we bind. More...
 
void osmo_dgram_rx_set_port (struct osmo_dgram_rx *conn, uint16_t port)
 Set the local port to which we bind. More...
 
void osmo_dgram_rx_set_read_cb (struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn))
 Set the read() call-back of the datagram receiver. More...
 
void osmo_dgram_rx_destroy (struct osmo_dgram_rx *conn)
 Destroy the datagram receiver. Releases Memory. More...
 
int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
 Open the datagram receiver. This actually initializes the underlying socket and binds it to the configured ip/port. More...
 
void osmo_dgram_rx_close (struct osmo_dgram_rx *conn)
 Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver, merely closes it! More...
 
static int dgram_rx_cb (struct osmo_dgram_rx *rx)
 
struct osmo_dgramosmo_dgram_create (void *ctx)
 Create an Osmocom datagram transceiver (bidirectional) More...
 
void osmo_dgram_destroy (struct osmo_dgram *conn)
 Destroy a Osmocom datagram transceiver. More...
 
void osmo_dgram_set_local_addr (struct osmo_dgram *conn, const char *addr)
 Set the local address to which we bind. More...
 
void osmo_dgram_set_remote_addr (struct osmo_dgram *conn, const char *addr)
 Set the remote address to which we transmit/connect. More...
 
void osmo_dgram_set_local_port (struct osmo_dgram *conn, uint16_t port)
 Set the local port to which we bind. More...
 
void osmo_dgram_set_remote_port (struct osmo_dgram *conn, uint16_t port)
 Set the remote port to which we transmit. More...
 
void osmo_dgram_set_read_cb (struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn))
 Set the read() call-back of the datagram receiver. More...
 
void osmo_dgram_set_data (struct osmo_dgram *conn, void *data)
 Set application private data of the datagram transmitter. More...
 
void * osmo_dgram_get_data (struct osmo_dgram *conn)
 Get application private data of the datagram transceiver. More...
 
int osmo_dgram_open (struct osmo_dgram *conn)
 Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects them to the configured ips/ports. More...
 
void osmo_dgram_close (struct osmo_dgram *conn)
 Close an Osmocom Datagram Transceiver. More...
 
void osmo_dgram_send (struct osmo_dgram *conn, struct msgb *msg)
 Enqueue data to be sent via an Osmocom datagram transceiver. More...
 
int osmo_dgram_recv (struct osmo_dgram *conn, struct msgb *msg)
 Receive data via Osmocom datagram transceiver. More...
 

Variables

struct osmo_dgram_tx __attribute__
 

Detailed Description

This code is intended to abstract any use of datagram type sockets, such as UDP. It offers both transmitter and receiver side implementations, fully integrated with the libosmocore select loop abstraction.

Function Documentation

◆ osmo_dgram_close()

void osmo_dgram_close ( struct osmo_dgram conn)

Close an Osmocom Datagram Transceiver.

Parameters
[in]connOsmocom Datagram Transceiver to be closed We unregister the socket fds from the osmocom select() loop and close them.

References osmo_dgram_rx_close(), and osmo_dgram_tx_close().

◆ osmo_dgram_create()

struct osmo_dgram* osmo_dgram_create ( void *  ctx)

Create an Osmocom datagram transceiver (bidirectional)

Parameters
[in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram and initializes it with default values. Internally, the Transceiver is based on a tuple of transmitter (osmo_dgram_tx) and receiver (osmo_dgram_rx)
Returns
Osmocom Datagram Transceiver; NULL on error

References osmo_dgram_rx_create(), and osmo_dgram_rx_set_read_cb().

◆ osmo_dgram_destroy()

void osmo_dgram_destroy ( struct osmo_dgram conn)

Destroy a Osmocom datagram transceiver.

Parameters
[in]connDatagram Transceiver to destroy

References osmo_dgram_rx_destroy(), and osmo_dgram_tx_destroy().

◆ osmo_dgram_get_data()

void* osmo_dgram_get_data ( struct osmo_dgram conn)

Get application private data of the datagram transceiver.

Parameters
[in]connDatagram Transceiver
Returns
Application private data, as set by osmo_dgram_set_data()

◆ osmo_dgram_open()

int osmo_dgram_open ( struct osmo_dgram conn)

Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects them to the configured ips/ports.

Parameters
[in]connDatagram Transceiver to open

References osmo_dgram_rx_close(), osmo_dgram_rx_open(), and osmo_dgram_tx_open().

◆ osmo_dgram_recv()

int osmo_dgram_recv ( struct osmo_dgram conn,
struct msgb *  msg 
)

Receive data via Osmocom datagram transceiver.

Parameters
[in]connDatagram Transceiver from which to receive
msgpre-allocate message buffer to which received data is appended
Returns
number of bytes read, negative on error.

References osmo_dgram_rx_recv().

◆ osmo_dgram_rx_close()

void osmo_dgram_rx_close ( struct osmo_dgram_rx conn)

Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver, merely closes it!

Parameters
[in]connStream Server Link to close

Referenced by osmo_dgram_close(), osmo_dgram_open(), and osmo_dgram_rx_destroy().

◆ osmo_dgram_rx_create()

struct osmo_dgram_rx* osmo_dgram_rx_create ( void *  ctx)

Create an Osmocom datagram receiver.

Parameters
[in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram_rx and initializes it with default values
Returns
Datagram Receiver; NULL on error

Referenced by osmo_dgram_create().

◆ osmo_dgram_rx_destroy()

void osmo_dgram_rx_destroy ( struct osmo_dgram_rx conn)

Destroy the datagram receiver. Releases Memory.

Parameters
[in]connDatagram Receiver

References osmo_dgram_rx_close().

Referenced by osmo_dgram_destroy().

◆ osmo_dgram_rx_open()

int osmo_dgram_rx_open ( struct osmo_dgram_rx conn)

Open the datagram receiver. This actually initializes the underlying socket and binds it to the configured ip/port.

Parameters
[in]connDatagram Receiver to open

Referenced by osmo_dgram_open().

◆ osmo_dgram_rx_recv()

int osmo_dgram_rx_recv ( struct osmo_dgram_rx conn,
struct msgb *  msg 
)

Receive data via Osmocom datagram receiver.

Parameters
[in]connDatagram Receiver from which to receive
msgpre-allocate message buffer to which received data is appended
Returns
number of bytes read (might be 0 for empty UDP packet), negative on error.

Referenced by osmo_dgram_recv().

◆ osmo_dgram_rx_set_addr()

void osmo_dgram_rx_set_addr ( struct osmo_dgram_rx conn,
const char *  addr 
)

Set the local address to which we bind.

Parameters
[in]connDatagram Receiver to modify
[in]addrLocal IP address

Referenced by osmo_dgram_set_local_addr().

◆ osmo_dgram_rx_set_port()

void osmo_dgram_rx_set_port ( struct osmo_dgram_rx conn,
uint16_t  port 
)

Set the local port to which we bind.

Parameters
[in]connDatagram Receiver to modify
[in]portLocal port number

Referenced by osmo_dgram_set_local_port().

◆ osmo_dgram_rx_set_read_cb()

void osmo_dgram_rx_set_read_cb ( struct osmo_dgram_rx conn,
int(*)(struct osmo_dgram_rx *conn)  read_cb 
)

Set the read() call-back of the datagram receiver.

Parameters
[in]connDatagram Receiver to modify
[in]read_cbCall-back function executed after read()

Referenced by osmo_dgram_create().

◆ osmo_dgram_send()

void osmo_dgram_send ( struct osmo_dgram conn,
struct msgb *  msg 
)

Enqueue data to be sent via an Osmocom datagram transceiver.

Parameters
[in]connDatagram Transceiver through which we want to send
[in]msgMessage buffer to enqueue in transmit queue

References osmo_dgram_tx_send().

◆ osmo_dgram_set_data()

void osmo_dgram_set_data ( struct osmo_dgram conn,
void *  data 
)

Set application private data of the datagram transmitter.

Parameters
[in]connDatagram Transmitter to modify
[in]dataUser-specific data (available in call-back functions)

◆ osmo_dgram_set_local_addr()

void osmo_dgram_set_local_addr ( struct osmo_dgram conn,
const char *  addr 
)

Set the local address to which we bind.

Parameters
[in]connDatagram Transceiver to modify
[in]addrLocal IP address

References osmo_dgram_rx_set_addr().

◆ osmo_dgram_set_local_port()

void osmo_dgram_set_local_port ( struct osmo_dgram conn,
uint16_t  port 
)

Set the local port to which we bind.

Parameters
[in]connDatagram Transceiver to modify
[in]portLocal Port Number

References osmo_dgram_rx_set_port().

◆ osmo_dgram_set_read_cb()

void osmo_dgram_set_read_cb ( struct osmo_dgram conn,
int(*)(struct osmo_dgram *conn)  read_cb 
)

Set the read() call-back of the datagram receiver.

Parameters
[in]connDatagram Receiver to modify
[in]read_cbCall-back function executed after read()

◆ osmo_dgram_set_remote_addr()

void osmo_dgram_set_remote_addr ( struct osmo_dgram conn,
const char *  addr 
)

Set the remote address to which we transmit/connect.

Parameters
[in]connDatagram Transceiver to modify
[in]addrRemote IP address

References osmo_dgram_tx_set_addr().

◆ osmo_dgram_set_remote_port()

void osmo_dgram_set_remote_port ( struct osmo_dgram conn,
uint16_t  port 
)

Set the remote port to which we transmit.

Parameters
[in]connDatagram Transceiver to modify
[in]portRemote Port Number

References osmo_dgram_tx_set_port().

◆ osmo_dgram_tx_close()

void osmo_dgram_tx_close ( struct osmo_dgram_tx conn)

Close an Osmocom Datagram Transmitter.

Parameters
[in]connOsmocom Datagram Transmitter to be closed We unregister the socket fd from the osmocom select() loop abstraction and close the socket

Referenced by osmo_dgram_close(), and osmo_dgram_tx_destroy().

◆ osmo_dgram_tx_create()

struct osmo_dgram_tx* osmo_dgram_tx_create ( void *  ctx)

Create an Osmocom datagram transmitter.

Parameters
[in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram_tx and initializes it with default values
Returns
Osmocom Datagram Transmitter; NULL on error

◆ osmo_dgram_tx_destroy()

void osmo_dgram_tx_destroy ( struct osmo_dgram_tx conn)

Destroy a Osmocom datagram transmitter.

Parameters
[in]connDatagram Transmitter to destroy

References osmo_dgram_tx_close().

Referenced by osmo_dgram_destroy().

◆ osmo_dgram_tx_open()

int osmo_dgram_tx_open ( struct osmo_dgram_tx conn)

Open connection of an Osmocom datagram transmitter.

Parameters
[in]connStream Client to connect
Returns
0 on success; negative in case of error

Referenced by osmo_dgram_open().

◆ osmo_dgram_tx_send()

void osmo_dgram_tx_send ( struct osmo_dgram_tx conn,
struct msgb *  msg 
)

Enqueue data to be sent via an Osmocom datagram transmitter.

Parameters
[in]connDatagram Transmitter through which we want to send
[in]msgMessage buffer to enqueue in transmit queue

Referenced by osmo_dgram_send().

◆ osmo_dgram_tx_set_addr()

void osmo_dgram_tx_set_addr ( struct osmo_dgram_tx conn,
const char *  addr 
)

Set the remote address to which we transmit.

Parameters
[in]connDatagram Transmitter to modify
[in]addrRemote IP address

Referenced by osmo_dgram_set_remote_addr().

◆ osmo_dgram_tx_set_data()

void osmo_dgram_tx_set_data ( struct osmo_dgram_tx conn,
void *  data 
)

Set application private data of the datagram transmitter.

Parameters
[in]connDatagram Transmitter to modify
[in]dataUser-specific data (available in call-back functions)

◆ osmo_dgram_tx_set_local_addr()

void osmo_dgram_tx_set_local_addr ( struct osmo_dgram_tx conn,
const char *  addr 
)

Set the local address from which we transmit.

Parameters
[in]connDatagram Transmitter to modify
[in]addrLocal IP address

◆ osmo_dgram_tx_set_local_port()

void osmo_dgram_tx_set_local_port ( struct osmo_dgram_tx conn,
uint16_t  port 
)

Set the local port from which we transmit.

Parameters
[in]connDatagram Transmitter to modify
[in]portLocal Port Number

◆ osmo_dgram_tx_set_port()

void osmo_dgram_tx_set_port ( struct osmo_dgram_tx conn,
uint16_t  port 
)

Set the remote port to which we transmit.

Parameters
[in]connDatagram Transmitter to modify
[in]portRemote Port Number

Referenced by osmo_dgram_set_remote_port().