X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=utcp_priv.h;h=69f1b0da5347371649da4dbaa92973cfed0617eb;hb=7cfc0ef57625f1dcc443c811c0eff3b99f915f8f;hp=6c1386307e691ca79babe93f66b62108ada9a177;hpb=4368d8c9956242f0bdc00d43ebf32a72332522c1;p=utcp diff --git a/utcp_priv.h b/utcp_priv.h index 6c13863..69f1b0d 100644 --- a/utcp_priv.h +++ b/utcp_priv.h @@ -30,8 +30,11 @@ #define FIN 4 #define RST 8 +#define NSACKS 4 #define DEFAULT_SNDBUFSIZE 4096 #define DEFAULT_MAXSNDBUFSIZE 131072 +#define DEFAULT_RCVBUFSIZE 0 +#define DEFAULT_MAXRCVBUFSIZE 131072 struct hdr { uint16_t src; // Source port @@ -57,7 +60,7 @@ enum state { TIME_WAIT }; -static const char *strstate[] = { +static const char *strstate[] __attribute__((unused)) = { [CLOSED] = "CLOSED", [LISTEN] = "LISTEN", [SYN_SENT] = "SYN_SENT", @@ -71,25 +74,43 @@ static const char *strstate[] = { [TIME_WAIT] = "TIME_WAIT" }; +struct buffer { + char *data; + uint32_t used; + uint32_t size; + uint32_t maxsize; +}; + +struct sack { + uint32_t offset; + uint32_t len; +}; + struct utcp_connection { void *priv; struct utcp *utcp; + bool reapable; - bool nodelay; - bool keepalive; + // Callbacks + + utcp_recv_t recv; + utcp_poll_t poll; + + // TCP State uint16_t src; uint16_t dst; enum state state; - // The following two structures form the TCB - struct { uint32_t una; uint32_t nxt; uint32_t wnd; uint32_t iss; + + uint32_t last; + uint32_t cwnd; } snd; struct { @@ -98,26 +119,46 @@ struct utcp_connection { uint32_t irs; } rcv; - utcp_recv_t recv; + int dupack; + + // Timers struct timeval conn_timeout; struct timeval rtrx_timeout; - char *sndbuf; - uint32_t sndbufsize; - uint32_t maxsndbufsize; + // Buffers + + struct buffer sndbuf; + struct buffer rcvbuf; + struct sack sacks[NSACKS]; + + // Per-socket options + + bool nodelay; + bool keepalive; + + // Congestion avoidance state + + struct timeval tlast; + uint64_t bandwidth; }; struct utcp { void *priv; + // Callbacks + utcp_accept_t accept; utcp_pre_accept_t pre_accept; utcp_send_t send; + // Global socket options + uint16_t mtu; int timeout; + // Connection management + struct utcp_connection **connections; int nconnections; int nallocated;