7#include <osmocom/core/msgb.h>
12#define OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION 0x80
13#define msgb_sctp_msg_flags(msg) (msg)->cb[2]
16#define msgb_sctp_ppid(msg) (msg)->cb[3]
18#define msgb_sctp_stream(msg) (msg)->cb[4]
66struct osmo_stream_srv_link;
68typedef int (*osmo_stream_srv_link_accept_cb_t)(
struct osmo_stream_srv_link *link,
int fd);
96enum osmo_stream_srv_link_param {
97 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED,
98 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED,
99 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS,
100 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS,
102 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPALIVE = 256,
103 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPIDLE,
104 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPINTVL,
105 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPCNT,
106 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_USER_TIMEOUT,
110 void *val,
size_t val_len);
114struct osmo_stream_srv;
116typedef int (*osmo_stream_srv_read_cb_t)(
struct osmo_stream_srv *conn);
117typedef int (*osmo_stream_srv_closed_cb_t)(
struct osmo_stream_srv *conn);
126typedef int (*osmo_stream_srv_segmentation_cb_t)(
struct msgb *msg);
127typedef int (*osmo_stream_srv_segmentation_cb2_t)(
struct osmo_stream_srv *conn,
struct msgb *msg);
130 osmo_stream_srv_read_cb_t read_cb,
131 osmo_stream_srv_closed_cb_t closed_cb,
133struct osmo_stream_srv *
osmo_stream_srv_create2(
void *ctx,
struct osmo_stream_srv_link *link,
int fd,
void *data);
157void osmo_stream_srv_clear_tx_queue(
struct osmo_stream_srv *conn);
159enum osmo_stream_srv_param {
160 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPALIVE = 256,
161 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPIDLE,
162 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPINTVL,
163 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPCNT,
164 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_USER_TIMEOUT,
167 void *val,
size_t val_len);
207struct osmo_stream_cli;
209typedef int (*osmo_stream_cli_connect_cb_t)(
struct osmo_stream_cli *cli);
210typedef int (*osmo_stream_cli_disconnect_cb_t)(
struct osmo_stream_cli *cli);
211typedef int (*osmo_stream_cli_read_cb_t)(
struct osmo_stream_cli *cli);
220typedef int (*osmo_stream_cli_segmentation_cb_t)(
struct msgb *msg);
221typedef int (*osmo_stream_cli_segmentation_cb2_t)(
struct osmo_stream_cli *cli,
struct msgb *msg);
260 OSMO_DEPRECATED(
"Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead");
268enum osmo_stream_cli_param {
269 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED,
270 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED,
271 OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS,
272 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS,
273 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS,
274 OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT,
276 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPALIVE = 256,
277 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPIDLE,
278 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPINTVL,
279 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPCNT,
280 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_USER_TIMEOUT,
284 void *val,
size_t val_len);
void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr)
Set the remote address to which we connect.
Definition: stream_cli.c:736
struct osmo_fd * osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli)
Retrieve Osmocom File Descriptor of the stream client socket.
Definition: stream_cli.c:1008
int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
Set given parameter of stream client to given value.
Definition: stream_cli.c:1525
int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg)
Receive data via an Osmocom stream client in osmo_fd mode.
Definition: stream_cli.c:1443
int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
Set the local address set to which we bind.
Definition: stream_cli.c:809
const char * osmo_stream_cli_get_name(const struct osmo_stream_cli *cli)
Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()).
Definition: stream_cli.c:725
int(* osmo_stream_cli_read_cb2_t)(struct osmo_stream_cli *cli, int res, struct msgb *msg)
Completion call-back function when something was read from from the stream client socket.
Definition: stream.h:218
void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
Re-connect an Osmocom Stream Client.
Definition: stream_cli.c:256
int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead")
DEPRECATED: use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead!...
Definition: stream_cli.c:1094
struct osmo_stream_cli * osmo_stream_cli_create(void *ctx)
Create an Osmocom stream client.
Definition: stream_cli.c:521
int osmo_stream_cli_set_ip_dscp(struct osmo_stream_cli *cli, uint8_t ip_dscp)
Set the DSCP (differentiated services code point) of the stream socket.
Definition: stream_cli.c:1219
int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain)
Set the socket domain for the stream client.
Definition: stream_cli.c:928
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).
Definition: stream_cli.c:785
int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type)
Set the socket type for the stream client.
Definition: stream_cli.c:908
void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data)
Set application private data of the stream client socket.
Definition: stream_cli.c:957
void * osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
Retrieve application private data of the stream client socket.
Definition: stream_cli.c:965
void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_disconnect_cb_t disconnect_cb)
Set the call-back function called on disconnect of the stream client socket.
Definition: stream_cli.c:1029
void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb)
Set the call-back function called on connect of the stream client socket.
Definition: stream_cli.c:1020
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).
Definition: stream_cli.c:797
void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb)
Set the call-back function called to read from the stream client socket.
Definition: stream_cli.c:1053
void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb_t read_cb)
Set the call-back function called to read from the stream client socket.
Definition: stream_cli.c:1040
bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
Check if Osmocom Stream Client is in connected state.
Definition: stream_cli.c:265
int osmo_stream_cli_open(struct osmo_stream_cli *cli)
Open connection of an Osmocom stream client.
Definition: stream_cli.c:1248
int osmo_stream_cli_set_tx_queue_max_length(struct osmo_stream_cli *cli, unsigned int size)
Set the maximum length queue of the stream client.
Definition: stream_cli.c:976
void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto)
Set the protocol for the stream client socket.
Definition: stream_cli.c:834
void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
Destroy a Osmocom stream client (includes close).
Definition: stream_cli.c:1063
void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay)
Set the NODELAY socket option to avoid Nagle-like behavior.
Definition: stream_cli.c:1159
int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
Set the remote address set to which we connect.
Definition: stream_cli.c:748
void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg)
Enqueue data to be sent via an Osmocom stream client.
Definition: stream_cli.c:1384
void osmo_stream_cli_set_segmentation_cb(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
Set the segmentation callback for the client.
Definition: stream_cli.c:876
void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port)
Set the remote port number to which we connect.
Definition: stream_cli.c:773
struct osmo_io_fd * osmo_stream_cli_get_iofd(const struct osmo_stream_cli *cli)
Retrieve osmo_io descriptor of the stream client socket.
Definition: stream_cli.c:305
int osmo_stream_cli_set_priority(struct osmo_stream_cli *cli, int sk_prio)
Set the priority value of the stream socket.
Definition: stream_cli.c:1188
void osmo_stream_cli_set_name_f(struct osmo_stream_cli *cli, const char *fmt,...)
Set a name on the cli object using arguments like printf() (used during logging).
Definition: stream_cli.c:701
void osmo_stream_cli_close(struct osmo_stream_cli *cli)
Close an Osmocom Stream Client.
Definition: stream_cli.c:224
void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout)
Set the reconnect time of the stream client socket.
Definition: stream_cli.c:948
void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name)
Set a name on the cli object (used during logging).
Definition: stream_cli.c:692
char * osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli)
Retrieve the stream client socket description.
Definition: stream_cli.c:993
void osmo_stream_cli_set_segmentation_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2)
Set the segmentation callback for the client.
Definition: stream_cli.c:893
void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli)
Clear the transmit queue of the stream client.
Definition: stream_cli.c:1500
int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli)
Retrieve file descriptor of the stream client socket.
Definition: stream_cli.c:285
int osmo_stream_srv_set_param(struct osmo_stream_srv *conn, enum osmo_stream_srv_param par, void *val, size_t val_len)
Set given parameter of stream_srv to given value.
Definition: stream_srv.c:1500
struct osmo_stream_srv * osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
Create a legacy osmo_fd mode Stream Server inside the specified link.
Definition: stream_srv.c:989
int osmo_stream_srv_link_set_type(struct osmo_stream_srv_link *link, int type)
Set the socket type for the stream server link.
Definition: stream_srv.c:375
void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name)
Set a name on the srv object (used during logging).
Definition: stream_srv.c:1089
void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, osmo_stream_srv_link_accept_cb_t accept_cb)
Set the accept() call-back of the stream server link.
Definition: stream_srv.c:532
void osmo_stream_srv_link_set_proto(struct osmo_stream_srv_link *link, uint16_t proto)
Set the protocol for the stream server link.
Definition: stream_srv.c:361
bool osmo_stream_srv_link_is_opened(const struct osmo_stream_srv_link *link)
Check whether the stream server link is opened.
Definition: stream_srv.c:630
void osmo_stream_srv_set_segmentation_cb2(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2)
Set the segmentation callback for target osmo_stream_srv structure.
Definition: stream_srv.c:1239
int osmo_stream_srv_link_set_priority(struct osmo_stream_srv_link *link, int sk_prio)
Set the priority value of the stream socket.
Definition: stream_srv.c:287
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.
Definition: stream_srv.c:271
struct osmo_fd * osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv)
Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode.
Definition: stream_srv.c:1291
void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
Destroy given Stream Server.
Definition: stream_srv.c:1339
const char * osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn)
Retrieve the stream server socket description.
Definition: stream_srv.c:1277
int osmo_stream_srv_link_set_ip_dscp(struct osmo_stream_srv_link *link, uint8_t ip_dscp)
Set the DSCP (differentiated services code point) of the stream socket.
Definition: stream_srv.c:300
void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb)
Set the segmentation callback for target osmo_stream_srv structure.
Definition: stream_srv.c:1220
int(* osmo_stream_srv_read_cb2_t)(struct osmo_stream_srv *conn, int res, struct msgb *msg)
Completion call-back function when something was read from from the stream client socket.
Definition: stream.h:124
void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data)
Set application private data of the stream server link.
Definition: stream_srv.c:415
int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
Open the stream server link.
Definition: stream_srv.c:573
int osmo_stream_srv_set_tx_queue_max_length(struct osmo_stream_srv *conn, unsigned int size)
Set the maximum length queue of the stream server connection.
Definition: stream_srv.c:1265
const char * osmo_stream_srv_link_get_name(const struct osmo_stream_srv_link *link)
Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()).
Definition: stream_srv.c:259
int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
Set given parameter of stream_srv_link to given value.
Definition: stream_srv.c:660
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.
Definition: stream_srv.c:348
void osmo_stream_srv_set_name_f(struct osmo_stream_srv *conn, const char *fmt,...)
Set a name on the srv object using arguments like printf() (used during logging).
Definition: stream_srv.c:1098
struct osmo_fd * osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link)
Retrieve Osmocom File Descriptor of the stream server link.
Definition: stream_srv.c:513
char * osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link)
Retrieve description of the stream server link e.
Definition: stream_srv.c:500
int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv)
Retrieve File Descriptor of the stream server.
Definition: stream_srv.c:1301
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.
Definition: stream_srv.c:1164
void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
Destroy the stream server link.
Definition: stream_srv.c:561
struct osmo_stream_srv * osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
Create an osmo_iofd mode Stream Server inside the specified link.
Definition: stream_srv.c:1037
int osmo_stream_srv_link_set_msgb_alloc_info(struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom)
Set the msgb allocation parameters on child osmo_stream_srv objects.
Definition: stream_srv.c:547
int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain)
Set the socket domain for the stream server link.
Definition: stream_srv.c:395
void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data)
Set application private data of the stream server.
Definition: stream_srv.c:1173
struct osmo_stream_srv_link * osmo_stream_srv_get_master(struct osmo_stream_srv *conn)
Retrieve the master (Link) from a Stream Server.
Definition: stream_srv.c:1329
struct osmo_io_fd * osmo_stream_srv_get_iofd(const struct osmo_stream_srv *srv)
Retrieve osmo_io descriptor of the stream server socket.
Definition: stream_srv.c:1320
void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg)
Enqueue data to be sent via an Osmocom stream server.
Definition: stream_srv.c:1367
struct osmo_stream_srv_link * osmo_stream_srv_link_create(void *ctx)
Create an Osmocom Stream Server Link.
Definition: stream_srv.c:226
int osmo_stream_srv_link_set_addrs(struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
Set the local address set to which we bind.
Definition: stream_srv.c:324
int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg)
Receive data via an Osmocom stream server in osmo_fd mode.
Definition: stream_srv.c:1423
void * osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link)
Retrieve application private data of the stream server link.
Definition: stream_srv.c:424
void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr)
Set the local address to which we bind.
Definition: stream_srv.c:311
void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
Set the call-back function for incoming data on an osmo_io stream_srv.
Definition: stream_srv.c:1139
void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link)
Close the stream server link and unregister from select loop.
Definition: stream_srv.c:644
const char * osmo_stream_srv_get_name(const struct osmo_stream_srv *conn)
Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()).
Definition: stream_srv.c:1125
int osmo_stream_srv_link_set_tx_queue_max_length(struct osmo_stream_srv_link *link, unsigned int size)
Set the maximum length queue of the stream servers accepted and allocated from this server link.
Definition: stream_srv.c:435
void osmo_stream_srv_link_set_name(struct osmo_stream_srv_link *link, const char *name)
Set a name on the srv_link object (used during logging).
Definition: stream_srv.c:250
void * osmo_stream_srv_get_data(struct osmo_stream_srv *conn)
Retrieve application private data of the stream server.
Definition: stream_srv.c:1253
int osmo_stream_srv_link_get_fd(const struct osmo_stream_srv_link *link)
Retrieve File Descriptor of the stream server link.
Definition: stream_srv.c:521
void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t close_cb)
Set the call-back function called when the stream server socket was closed.
Definition: stream_srv.c:1152