TAS
TCP Acceleration as an OS Service
Data Structures | Enumerations | Functions | Variables
Tas-sp-tcp

TCP Protocol Handling. More...

Collaboration diagram for Tas-sp-tcp:

Data Structures

struct  connection_cc_dctcp_win
 
struct  connection_cc_dctcp_rate
 
struct  connection_cc_timely
 
struct  connection
 
struct  listener
 

Enumerations

enum  connection_status {
  CONN_SYN_WAIT, CONN_ARP_PENDING, CONN_SYN_SENT, CONN_REG_SYNACK,
  CONN_OPEN, CONN_CLOSED, CONN_FAILED
}
 

Functions

int tcp_init (void)
 
void tcp_poll (void)
 
int tcp_open (struct app_context *ctx, uint64_t opaque, uint32_t remote_ip, uint16_t remote_port, uint32_t db_id, struct connection **conn)
 
int tcp_listen (struct app_context *ctx, uint64_t opaque, uint16_t local_port, uint32_t backlog, int reuseport, struct listener **listen)
 
int tcp_accept (struct app_context *ctx, uint64_t opaque, struct listener *listen, uint32_t db_id)
 
int tcp_packet (const void *pkt, uint16_t len, uint32_t fn_core, uint16_t flow_group)
 
int tcp_close (struct connection *conn)
 
void tcp_destroy (struct connection *conn)
 
void tcp_timeout (struct timeout *to, enum timeout_type type)
 

Variables

struct connectiontcp_conns
 

Detailed Description

TCP Protocol Handling.

Enumeration Type Documentation

◆ connection_status

TCP connection state machine state.

Enumerator
CONN_SYN_WAIT 

Accepted: waiting for a SYN.

CONN_ARP_PENDING 

Opening: waiting for ARP request.

CONN_SYN_SENT 

Opening: SYN request sent.

CONN_REG_SYNACK 

Opening: SYN received, waiting for NIC registration.

CONN_OPEN 

Connection opened.

CONN_CLOSED 

Connection closed.

CONN_FAILED 

Connection failed.

Definition at line 353 of file internal.h.

Function Documentation

◆ tcp_accept()

int tcp_accept ( struct app_context ctx,
uint64_t  opaque,
struct listener listen,
uint32_t  db_id 
)

Prepare to receive a connection on a listener.

Parameters
ctxApplication context
opaqueOpaque value passed from application
listenListener
db_idDoorbell ID
Returns
0 on success, <0 else

Definition at line 322 of file tcp.c.

References listener::backlog_used, connection::cnt_tx_pending, CONN_SYN_WAIT, connection::ctx, connection::db_id, connection::flags, listener::flags, connection::ht_next, connection::local_port, connection::opaque, listener::port, connection::status, and listener::wait_conns.

◆ tcp_close()

int tcp_close ( struct connection conn)

Destroy already closed/failed connection.

Parameters
connConnection

Definition at line 392 of file tcp.c.

References cc_conn_remove(), CONN_CLOSED, CONN_OPEN, connection::flow_id, connection::local_seq, nicif_connection_disable(), connection::remote_seq, connection::status, connection::to, connection::to_armed, and util_timeout_arm().

◆ tcp_destroy()

void tcp_destroy ( struct connection conn)

Destroy already closed/failed connection.

Parameters
connConnection

Definition at line 428 of file tcp.c.

References CONN_FAILED, and connection::status.

Referenced by appif_accept_conn(), and appif_conn_opened().

◆ tcp_init()

int tcp_init ( void  )

Initialize TCP subsystem

Definition at line 111 of file tcp.c.

References util_timeout_time_us().

◆ tcp_listen()

int tcp_listen ( struct app_context ctx,
uint64_t  opaque,
uint16_t  local_port,
uint32_t  backlog,
int  reuseport,
struct listener **  listen 
)

Open a listener.

Parameters
ctxApplication context
opaqueOpaque value passed from application
local_portPort to listen on
backlogBacklog queue length
reuseportEnable reuseport, to have multiple listeners for the same port.
listenPointer to location for storing pointer of created listener struct.
Returns
0 on success, <0 else

Definition at line 211 of file tcp.c.

References listener::backlog_cores, listener::backlog_fgs, listener::backlog_len, listener::backlog_pos, listener::backlog_ptrs, listener::backlog_used, listener::ctx, listener::flags, listener::opaque, listener::port, and listener::wait_conns.

◆ tcp_open()

int tcp_open ( struct app_context ctx,
uint64_t  opaque,
uint32_t  remote_ip,
uint16_t  remote_port,
uint32_t  db_id,
struct connection **  conn 
)

Open a connection.

This function returns asynchronously if it does not fail immediately. The TCP module will call appif_conn_opened().

Parameters
ctxApplication context
opaqueOpaque value passed from application
remote_ipRemote IP address
remote_portRemote port number
db_idDoorbell ID to use for connection
connPointer to location for storing pointer of created conn struct.
Returns
0 on success, <0 else

Definition at line 147 of file tcp.c.

References connection::cnt_tx_pending, connection::comp, CONN_ARP_PENDING, connection::ctx, connection::db_id, connection::flags, configuration::ip, connection::local_ip, connection::local_port, connection::local_seq, connection::opaque, connection::remote_ip, connection::remote_mac, connection::remote_port, connection::remote_seq, routing_resolve(), and connection::status.

◆ tcp_packet()

int tcp_packet ( const void *  pkt,
uint16_t  len,
uint32_t  fn_core,
uint16_t  flow_group 
)

RX processing for a TCP packet.

Parameters
pktPointer to packet
lenLength of packet
fn_coreFlexNIC emulator core
flow_groupFlow group (rss bucket for steering)
Returns
0 if packet has been consumed, <0 otherwise.

Definition at line 350 of file tcp.c.

References configuration::ip, and configuration::kni_name.

◆ tcp_poll()

void tcp_poll ( void  )

Poll for TCP events

Definition at line 123 of file tcp.c.

References connection::comp, CONN_ARP_PENDING, CONN_REG_SYNACK, and connection::status.

◆ tcp_timeout()

void tcp_timeout ( struct timeout to,
enum timeout_type  type 
)

Variable Documentation

◆ tcp_conns

struct connection* tcp_conns

List of tcp connections