libosmo-netif
0.3.0.5-7028
Osmocom network interface library
|
Files | |
file | stream.c |
Osmocom stream socket helpers. | |
Data Structures | |
struct | osmo_stream_cli |
struct | osmo_stream_srv_link |
struct | osmo_stream_srv |
Macros | |
#define | msgb_sctp_ppid(msg) (msg)->cb[3] |
Access the SCTP PPID from the msgb control buffer. | |
#define | msgb_sctp_stream(msg) (msg)->cb[4] |
Access the SCTP Stream ID from the msgb control buffer. | |
#define | MSG_NOSIGNAL 0 |
#define | OSMO_STREAM_CLI_F_RECONF (1 << 0) |
#define | OSMO_STREAM_CLI_F_NODELAY (1 << 1) |
#define | OSMO_STREAM_SRV_F_RECONF (1 << 0) |
#define | OSMO_STREAM_SRV_F_NODELAY (1 << 1) |
#define | OSMO_STREAM_SRV_F_FLUSH_DESTROY (1 << 0) |
Enumerations | |
enum | osmo_stream_cli_state { STREAM_CLI_STATE_NONE = 0, STREAM_CLI_STATE_CONNECTING = 1, STREAM_CLI_STATE_CONNECTED = 2, STREAM_CLI_STATE_MAX } |
Functions | |
struct osmo_stream_srv_link * | osmo_stream_srv_link_create (void *ctx) |
Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to individual Stream Servers. More... | |
void | osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link) |
Destroy the stream server link. Closes + Releases Memory. More... | |
void | osmo_stream_srv_link_set_nodelay (struct osmo_stream_srv_link *link, bool nodelay) |
Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via this server link, before calling the accept_cb() More... | |
void | osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr) |
Set the local address to which we bind. More... | |
void | osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port) |
Set the local port number to which we bind. More... | |
void | osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto) |
Set the protocol for the stream server link. More... | |
void | osmo_stream_srv_link_set_accept_cb (struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd)) |
Set the accept() call-back of the stream server link. More... | |
void | osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data) |
Set application private data of the stream server link. More... | |
void * | osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link) |
Get application private data of the stream server link. More... | |
struct osmo_fd * | osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link) |
Get Osmocom File Descriptor of the stream server link. More... | |
int | osmo_stream_srv_link_open (struct osmo_stream_srv_link *link) |
Open the stream server link. This actually initializes the underlying socket and binds it to the configured ip/port. More... | |
void | osmo_stream_srv_link_close (struct osmo_stream_srv_link *link) |
Close the stream server link and unregister from select loop Does not destroy the server link, merely closes it! More... | |
struct osmo_stream_srv * | osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, int(*cb)(struct osmo_stream_srv *conn), int(*closed_cb)(struct osmo_stream_srv *conn), void *data) |
Create a Stream Server inside the specified link. More... | |
void * | osmo_stream_srv_get_data (struct osmo_stream_srv *conn) |
Get application private data of the stream server. More... | |
struct osmo_stream_srv_link * | osmo_stream_srv_get_master (struct osmo_stream_srv *conn) |
Get the master (Link) from a Stream Server. More... | |
struct osmo_fd * | osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn) |
Get Osmocom File Descriptor of the stream server. More... | |
void | osmo_stream_srv_destroy (struct osmo_stream_srv *conn) |
Destroy given Stream Server This function closes the Stream Server socket, unregisters from select loop, invokes the connection's closed_cb() callback to allow API users to clean up any associated state they have for this connection, and then de-allocates associated memory. More... | |
void | osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn) |
Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection. More... | |
void | osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data) |
Set application private data of the stream server. More... | |
void | osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg) |
Enqueue data to be sent via an Osmocom stream server. More... | |
int | osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg) |
Receive data via Osmocom stream server. More... | |
void | osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay) |
Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via osmo_stream_cli_open or any re-connect. You have to set this before opening the socket. More... | |
void | osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr) |
Set the remote address to which we connect. More... | |
void | osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port) |
Set the remote port number to which we connect. More... | |
void | osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto) |
Set the protocol for the stream client socket. More... | |
void | osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr) |
Set the local address for the socket (to be bound to) More... | |
void | osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port) |
Set the local port number for the socket (to be bound to) More... | |
void | osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data) |
Set application private data of the stream client socket. More... | |
void | osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout) |
Set the reconnect time of the stream client socket. More... | |
void * | osmo_stream_cli_get_data (struct osmo_stream_cli *cli) |
Get application private data of the stream client socket. More... | |
struct osmo_fd * | osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli) |
Get Osmocom File Descriptor of the stream client socket. More... | |
void | osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, int(*connect_cb)(struct osmo_stream_cli *cli)) |
Set the call-back function called on connect of the stream client socket. More... | |
void | osmo_stream_cli_set_read_cb (struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli)) |
Set the call-back function called to read from the stream client socket. More... | |
void | osmo_stream_cli_reconnect (struct osmo_stream_cli *cli) |
Re-connect an Osmocom Stream Client If re-connection is enabled for this client, we close any existing connection (if any) and schedule a re-connect timer. | |
struct osmo_stream_cli * | osmo_stream_cli_create (void *ctx) |
Create an Osmocom stream client. More... | |
void | osmo_stream_cli_destroy (struct osmo_stream_cli *cli) |
Destroy a Osmocom stream client (includes close) More... | |
int | osmo_stream_cli_open (struct osmo_stream_cli *cli) |
Open connection of an Osmocom stream client. More... | |
int | osmo_stream_cli_open2 (struct osmo_stream_cli *cli, int reconnect) |
Open connection of an Osmocom stream client. More... | |
void | osmo_stream_cli_close (struct osmo_stream_cli *cli) |
Close an Osmocom Stream Client. More... | |
void | osmo_stream_cli_send (struct osmo_stream_cli *cli, struct msgb *msg) |
Enqueue data to be sent via an Osmocom stream client. More... | |
int | osmo_stream_cli_recv (struct osmo_stream_cli *cli, struct msgb *msg) |
Receive data via an Osmocom stream client. More... | |
static int | sctp_sock_activate_events (int fd) |
static int | setsockopt_nodelay (int fd, int proto, int on) |
static void | osmo_stream_cli_read (struct osmo_stream_cli *cli) |
static int | osmo_stream_cli_write (struct osmo_stream_cli *cli) |
static int | osmo_stream_cli_fd_cb (struct osmo_fd *ofd, unsigned int what) |
static void | cli_timer_cb (void *data) |
static int | osmo_stream_srv_fd_cb (struct osmo_fd *ofd, unsigned int what) |
static void | osmo_stream_srv_read (struct osmo_stream_srv *conn) |
static void | osmo_stream_srv_write (struct osmo_stream_srv *conn) |
static int | osmo_stream_srv_cb (struct osmo_fd *ofd, unsigned int what) |
This code is intended to abstract any use of stream-type sockets, such as TCP and SCTP. It offers both server and client side implementations, fully integrated with the libosmocore select loop abstraction.
void osmo_stream_cli_close | ( | struct osmo_stream_cli * | cli | ) |
Close an Osmocom Stream Client.
[in] | cli | Osmocom Stream Client to be closed We unregister the socket fd from the osmocom select() loop abstraction and close the socket |
Referenced by osmo_stream_cli_destroy(), and osmo_stream_cli_reconnect().
struct osmo_stream_cli * osmo_stream_cli_create | ( | void * | ctx | ) |
Create an Osmocom stream client.
[in] | ctx | talloc context from which to allocate memory This function allocates a new osmo_stream_cli and initializes it with default values (5s reconnect timer, TCP protocol) |
void osmo_stream_cli_destroy | ( | struct osmo_stream_cli * | cli | ) |
Destroy a Osmocom stream client (includes close)
[in] | cli | Stream Client to destroy |
References osmo_stream_cli_close().
void * osmo_stream_cli_get_data | ( | struct osmo_stream_cli * | cli | ) |
Get application private data of the stream client socket.
[in] | cli | Stream Client to modif |
struct osmo_fd * osmo_stream_cli_get_ofd | ( | struct osmo_stream_cli * | cli | ) |
Get Osmocom File Descriptor of the stream client socket.
[in] | cli | Stream Client to modif |
int osmo_stream_cli_open | ( | struct osmo_stream_cli * | cli | ) |
Open connection of an Osmocom stream client.
[in] | cli | Stream Client to connect |
References osmo_stream_cli_open2().
int osmo_stream_cli_open2 | ( | struct osmo_stream_cli * | cli, |
int | reconnect | ||
) |
Open connection of an Osmocom stream client.
[in] | cli | Stream Client to connect |
[in] | reconect | 1 if we should not automatically reconnect |
Referenced by osmo_stream_cli_open().
int osmo_stream_cli_recv | ( | struct osmo_stream_cli * | cli, |
struct msgb * | msg | ||
) |
Receive data via an Osmocom stream client.
[in] | cli | Stream Client through which we want to send |
msg | pre-allocate message buffer to which received data is appended |
References osmo_stream_cli_reconnect().
void osmo_stream_cli_send | ( | struct osmo_stream_cli * | cli, |
struct msgb * | msg | ||
) |
Enqueue data to be sent via an Osmocom stream client.
[in] | cli | Stream Client through which we want to send |
[in] | msg | Message buffer to enqueue in transmit queue |
void osmo_stream_cli_set_addr | ( | struct osmo_stream_cli * | cli, |
const char * | addr | ||
) |
Set the remote address to which we connect.
[in] | cli | Stream Client to modify |
[in] | addr | Remote IP address |
void osmo_stream_cli_set_connect_cb | ( | struct osmo_stream_cli * | cli, |
int(*)(struct osmo_stream_cli *cli) | connect_cb | ||
) |
Set the call-back function called on connect of the stream client socket.
[in] | cli | Stream Client to modif |
[in] | connect_cb | Call-back function to be called upon connect |
void osmo_stream_cli_set_data | ( | struct osmo_stream_cli * | cli, |
void * | data | ||
) |
Set application private data of the stream client socket.
[in] | cli | Stream Client to modify |
[in] | data | User-specific data (available in call-back functions) |
void osmo_stream_cli_set_local_addr | ( | struct osmo_stream_cli * | cli, |
const char * | addr | ||
) |
Set the local address for the socket (to be bound to)
[in] | cli | Stream Client to modify |
[in] | port | Local host name |
void osmo_stream_cli_set_local_port | ( | struct osmo_stream_cli * | cli, |
uint16_t | port | ||
) |
Set the local port number for the socket (to be bound to)
[in] | cli | Stream Client to modify |
[in] | port | Local port number |
void osmo_stream_cli_set_nodelay | ( | struct osmo_stream_cli * | cli, |
bool | nodelay | ||
) |
Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via osmo_stream_cli_open or any re-connect. You have to set this before opening the socket.
[in] | cli | Stream client whose sockets are to be configured |
[in] | nodelay | whether to set (true) NODELAY before connect() |
void osmo_stream_cli_set_port | ( | struct osmo_stream_cli * | cli, |
uint16_t | port | ||
) |
Set the remote port number to which we connect.
[in] | cli | Stream Client to modify |
[in] | port | Remote port number |
void osmo_stream_cli_set_proto | ( | struct osmo_stream_cli * | cli, |
uint16_t | proto | ||
) |
Set the protocol for the stream client socket.
[in] | cli | Stream Client to modify |
[in] | proto | Protocol (like IPPROTO_TCP (default), IPPROTO_SCTP, ...) |
void osmo_stream_cli_set_read_cb | ( | struct osmo_stream_cli * | cli, |
int(*)(struct osmo_stream_cli *cli) | read_cb | ||
) |
Set the call-back function called to read from the stream client socket.
[in] | cli | Stream Client to modif |
[in] | read_cb | Call-back function to be called when we want to read |
void osmo_stream_cli_set_reconnect_timeout | ( | struct osmo_stream_cli * | cli, |
int | timeout | ||
) |
Set the reconnect time of the stream client socket.
[in] | cli | Stream Client to modify |
[in] | timeout | Re-connect timeout in seconds |
struct osmo_stream_srv * osmo_stream_srv_create | ( | void * | ctx, |
struct osmo_stream_srv_link * | link, | ||
int | fd, | ||
int(*)(struct osmo_stream_srv *conn) | cb, | ||
int(*)(struct osmo_stream_srv *conn) | closed_cb, | ||
void * | data | ||
) |
Create a Stream Server inside the specified link.
[in] | ctx | talloc allocation context from which to allocate |
[in] | link | Stream Server Link to which we belong |
void osmo_stream_srv_destroy | ( | struct osmo_stream_srv * | conn | ) |
Destroy given Stream Server This function closes the Stream Server socket, unregisters from select loop, invokes the connection's closed_cb() callback to allow API users to clean up any associated state they have for this connection, and then de-allocates associated memory.
[in] | conn | Stream Server to be destroyed |
void * osmo_stream_srv_get_data | ( | struct osmo_stream_srv * | conn | ) |
Get application private data of the stream server.
[in] | conn | Stream Server |
struct osmo_stream_srv_link * osmo_stream_srv_get_master | ( | struct osmo_stream_srv * | conn | ) |
Get the master (Link) from a Stream Server.
[in] | conn | Stream Server of which we want to know the Link |
struct osmo_fd * osmo_stream_srv_get_ofd | ( | struct osmo_stream_srv * | conn | ) |
Get Osmocom File Descriptor of the stream server.
[in] | conn | Stream Server |
void osmo_stream_srv_link_close | ( | struct osmo_stream_srv_link * | link | ) |
Close the stream server link and unregister from select loop Does not destroy the server link, merely closes it!
[in] | link | Stream Server Link to close |
Referenced by osmo_stream_srv_link_destroy().
struct osmo_stream_srv_link * osmo_stream_srv_link_create | ( | void * | ctx | ) |
Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to individual Stream Servers.
[in] | ctx | talloc allocation context |
void osmo_stream_srv_link_destroy | ( | struct osmo_stream_srv_link * | link | ) |
Destroy the stream server link. Closes + Releases Memory.
[in] | link | Stream Server Link |
References osmo_stream_srv_link_close().
void * osmo_stream_srv_link_get_data | ( | struct osmo_stream_srv_link * | link | ) |
Get application private data of the stream server link.
[in] | link | Stream Server Link to modify |
struct osmo_fd * osmo_stream_srv_link_get_ofd | ( | struct osmo_stream_srv_link * | link | ) |
Get Osmocom File Descriptor of the stream server link.
[in] | link | Stream Server Link |
int osmo_stream_srv_link_open | ( | struct osmo_stream_srv_link * | link | ) |
Open the stream server link. This actually initializes the underlying socket and binds it to the configured ip/port.
[in] | link | Stream Server Link to open |
void osmo_stream_srv_link_set_accept_cb | ( | struct osmo_stream_srv_link * | link, |
int(*)(struct osmo_stream_srv_link *link, int fd) | accept_cb | ||
) |
Set the accept() call-back of the stream server link.
[in] | link | Stream Server Link |
[in] | accept_cb | Call-back function executed upon accept() |
void osmo_stream_srv_link_set_addr | ( | struct osmo_stream_srv_link * | link, |
const char * | addr | ||
) |
Set the local address to which we bind.
[in] | link | Stream Server Link to modify |
[in] | addr | Local IP address |
void osmo_stream_srv_link_set_data | ( | struct osmo_stream_srv_link * | link, |
void * | data | ||
) |
Set application private data of the stream server link.
[in] | link | Stream Server Link to modify |
[in] | data | User-specific data (available in call-back functions) |
void osmo_stream_srv_link_set_nodelay | ( | struct osmo_stream_srv_link * | link, |
bool | nodelay | ||
) |
Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via this server link, before calling the accept_cb()
[in] | link | server link whose sockets are to be configured |
[in] | nodelay | whether to set (true) NODELAY after accept |
void osmo_stream_srv_link_set_port | ( | struct osmo_stream_srv_link * | link, |
uint16_t | port | ||
) |
Set the local port number to which we bind.
[in] | link | Stream Server Link to modify |
[in] | port | Local port number |
void osmo_stream_srv_link_set_proto | ( | struct osmo_stream_srv_link * | link, |
uint16_t | proto | ||
) |
Set the protocol for the stream server link.
[in] | link | Stream Server Link to modify |
[in] | proto | Protocol (like IPPROTO_TCP (default), IPPROTO_SCTP, ...) |
int osmo_stream_srv_recv | ( | struct osmo_stream_srv * | conn, |
struct msgb * | msg | ||
) |
Receive data via Osmocom stream server.
[in] | conn | Stream Server from which to receive |
msg | pre-allocate message buffer to which received data is appended |
References msgb_sctp_ppid, and msgb_sctp_stream.
void osmo_stream_srv_send | ( | struct osmo_stream_srv * | conn, |
struct msgb * | msg | ||
) |
Enqueue data to be sent via an Osmocom stream server.
[in] | conn | Stream Server through which we want to send |
[in] | msg | Message buffer to enqueue in transmit queue |
void osmo_stream_srv_set_data | ( | struct osmo_stream_srv * | conn, |
void * | data | ||
) |
Set application private data of the stream server.
[in] | conn | Stream Server to modify |
[in] | data | User-specific data (available in call-back functions) |
void osmo_stream_srv_set_flush_and_destroy | ( | struct osmo_stream_srv * | conn | ) |
Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection.
[in] | conn | Stream Server to modify |