libosmo-netif 1.6.0.5-6a68
Osmocom network interface library
All Data Structures Files Functions Variables Typedefs Macros Modules Pages
Osmocom Datagram Socket

This code is intended to abstract any use of datagram type sockets, such as UDP. More...

Files

file  datagram.h
 Osmocom datagram socket helpers.
 
file  datagram.c
 Osmocom datagram socket helpers.
 

Functions

struct osmo_dgram_tx * osmo_dgram_tx_create (void *ctx)
 Create an Osmocom datagram transmitter. More...
 
void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
 Destroy a 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...
 
int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
 Open connection of an Osmocom datagram transmitter. More...
 
void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
 Close 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...
 
struct osmo_dgram_rx * osmo_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. More...
 
int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
 Open the datagram receiver. 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...
 
int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
 Receive data via Osmocom datagram receiver. More...
 
struct osmo_dgram * osmo_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...
 
int osmo_dgram_open (struct osmo_dgram *conn)
 Open the datagram transceiver. More...
 
void osmo_dgram_close (struct osmo_dgram *conn)
 Close an 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...
 
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...
 

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().