3. API¶
The full API documentation extracted by doxygen can be found here.
3.1. TAS Low-Level Application API¶
-
int
flextcp_init
(void)¶ Initializes global flextcp state, must only be called once.
- Return
0 on success, < 0 on failure
3.1.1. Contexts¶
-
struct
flextcp_context
¶ A flextcp context is per-thread state for the stack. (opaque) This includes:
admin queue pair to kernel
notification queue pair to flexnic
-
int
flextcp_context_create
(struct flextcp_context *ctx)¶ Create a flextcp context.
-
int
flextcp_context_poll
(struct flextcp_context *ctx, int num, struct flextcp_event *events)¶ Poll events from a flextcp socket.
Warning
doxygenfunction: Cannot find function “flextcp_block” in doxygen xml output for project “TAS” from directory: xml/
3.1.2. Connections¶
-
struct
flextcp_connection
¶ TCP connection. (opaque)
-
int
flextcp_connection_open
(struct flextcp_context *ctx, struct flextcp_connection *conn, uint32_t dst_ip, uint16_t dst_port)¶ Open a connection (asynchronous).
-
int
flextcp_connection_close
(struct flextcp_context *ctx, struct flextcp_connection *conn)¶ Close a connection (asynchronous).
-
int
flextcp_connection_rx_done
(struct flextcp_context *ctx, struct flextcp_connection *conn, size_t len)¶ Receive processing for `len’ bytes done.
-
ssize_t
flextcp_connection_tx_alloc
(struct flextcp_connection *conn, size_t len, void **buf)¶ Allocate transmit buffer for `len’ bytes, returns number of bytes allocated.
NOTE: short allocs can occur if buffer wraps around
-
ssize_t
flextcp_connection_tx_alloc2
(struct flextcp_connection *conn, size_t len, void **buf_1, size_t *len_1, void **buf_2)¶ Allocate transmit buffer for `len’ bytes, returns number of bytes allocated. May be split across two buffers, in case of wrap around.
-
int
flextcp_connection_tx_send
(struct flextcp_context *ctx, struct flextcp_connection *conn, size_t len)¶ Send previously allocated bytes in transmit buffer
-
int
flextcp_connection_tx_close
(struct flextcp_context *ctx, struct flextcp_connection *conn)¶ Send previously allocated bytes in transmit buffer
-
int
flextcp_connection_tx_possible
(struct flextcp_context *ctx, struct flextcp_connection *conn)¶ Make sure there is room in the context send queue (not send buffer)
Returns 0 if transmit is possible, -1 otherwise.
-
int
flextcp_connection_move
(struct flextcp_context *ctx, struct flextcp_connection *conn)¶ Move connection to specfied context
3.1.3. Listeners¶
-
struct
flextcp_listener
¶ TCP listening “socket”. (opaque)
-
FLEXTCP_LISTEN_REUSEPORT
¶
-
int
flextcp_listen_open
(struct flextcp_context *ctx, struct flextcp_listener *lst, uint16_t port, uint32_t backlog, uint32_t flags)¶ Open a listening socket (asynchronous).
-
int
flextcp_listen_accept
(struct flextcp_context *ctx, struct flextcp_listener *lst, struct flextcp_connection *conn)¶ Accept connections on a listening socket (asynchronous). This can be called more than once to register multiple connection handles.
3.1.4. Events¶
-
enum
flextcp_event_type
¶ Types of events that can occur in flextcp contexts
Values:
-
enumerator
FLEXTCP_EV_LISTEN_OPEN
¶ flextcp_listen_open() result.
-
enumerator
FLEXTCP_EV_LISTEN_NEWCONN
¶ New connection on listening socket arrived.
-
enumerator
FLEXTCP_EV_LISTEN_ACCEPT
¶ Accept operation completed
-
enumerator
FLEXTCP_EV_CONN_OPEN
¶ flextcp_connection_open() result
-
enumerator
FLEXTCP_EV_CONN_CLOSED
¶ Connection was closed
-
enumerator
FLEXTCP_EV_CONN_RECEIVED
¶ Data arrived on connection
-
enumerator
FLEXTCP_EV_CONN_SENDBUF
¶ More send buffer available
-
enumerator
FLEXTCP_EV_CONN_RXCLOSED
¶ Receive stream closed
-
enumerator
FLEXTCP_EV_CONN_TXCLOSED
¶ transmit stream closed
-
enumerator
FLEXTCP_EV_CONN_MOVED
¶ Connection moved to new context
-
enumerator
-
struct
flextcp_event
¶ Events that can occur on flextcp contexts.
Public Members
-
struct flextcp_event::[anonymous]::[anonymous]
listen_open
¶
-
struct flextcp_event::[anonymous]::[anonymous]
listen_newconn
¶
-
struct flextcp_event::[anonymous]::[anonymous]
listen_accept
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_open
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_received
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_sendbuf
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_rxclosed
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_txclosed
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_moved
¶
-
struct flextcp_event::[anonymous]::[anonymous]
conn_closed
¶
-
struct flextcp_event::[anonymous]::[anonymous]