X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=utcp_priv.h;h=7d2d07396c7c6b097d39ea39bd23dfca98f43be1;hb=bbd35b9f705bc7684cf469d87248c8fb3f7c85c7;hp=5a72ce9a1fd58a0ffecd9872a102d8cc899123d9;hpb=365dd2877f26120742c409e62865b7e563ec87fa;p=utcp diff --git a/utcp_priv.h b/utcp_priv.h index 5a72ce9..7d2d073 100644 --- a/utcp_priv.h +++ b/utcp_priv.h @@ -30,6 +30,25 @@ #define FIN 4 #define RST 8 +#define AUX_INIT 1 +#define AUX_FRAME 2 +#define AUX_SAK 3 +#define AUX_TIMESTAMP 4 + +#define NSACKS 4 +#define DEFAULT_SNDBUFSIZE 4096 +#define DEFAULT_MAXSNDBUFSIZE 131072 +#define DEFAULT_RCVBUFSIZE 0 +#define DEFAULT_MAXRCVBUFSIZE 131072 + +#define DEFAULT_MTU 1000 + +#define USEC_PER_SEC 1000000 +#define DEFAULT_USER_TIMEOUT 60 // sec +#define CLOCK_GRANULARITY 1000 // usec +#define START_RTO 1000000 // usec +#define MAX_RTO 3000000 // usec + struct hdr { uint16_t src; // Source port uint16_t dst; // Destination port @@ -54,7 +73,7 @@ enum state { TIME_WAIT }; -static const char *strstate[] = { +static const char *strstate[] __attribute__((unused)) = { [CLOSED] = "CLOSED", [LISTEN] = "LISTEN", [SYN_SENT] = "SYN_SENT", @@ -68,48 +87,106 @@ static const char *strstate[] = { [TIME_WAIT] = "TIME_WAIT" }; +struct buffer { + char *data; + uint32_t offset; + 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; + uint32_t flags; + bool reapable; + // 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; + uint32_t ssthresh; } snd; struct { uint32_t nxt; - uint32_t wnd; uint32_t irs; } rcv; - utcp_recv_t recv; + int dupack; + + // Timers struct timeval conn_timeout; struct timeval rtrx_timeout; + struct timeval rtt_start; + uint32_t rtt_seq; + + // Buffers + + struct buffer sndbuf; + struct buffer rcvbuf; + struct sack sacks[NSACKS]; + + // Per-socket options + + bool nodelay; + bool keepalive; + bool shut_wr; + + // Congestion avoidance state - char *sndbuf; - uint32_t sndbufsize; + 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; - uint16_t mtu; - int timeout; + // Packet buffer + + void *pkt; + + // Global socket options + + uint16_t mtu; // The maximum size of a UTCP packet, including headers. + uint16_t mss; // The maximum size of the payload of a UTCP packet. + int timeout; // sec + + // RTT variables + + uint32_t srtt; // usec + uint32_t rttvar; // usec + uint32_t rto; // usec + + // Connection management struct utcp_connection **connections; int nconnections;