X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=utcp_priv.h;h=1cf9e8743da561020be4165e533b553778798639;hb=bf55733700d946f678947a6caaa782b56669a3f1;hp=d73d664d51e9981c82150e7766a98de0dd76fed9;hpb=5d4cf9d0eb85c7322298a2a0526132197e3bf633;p=utcp diff --git a/utcp_priv.h b/utcp_priv.h index d73d664..1cf9e87 100644 --- a/utcp_priv.h +++ b/utcp_priv.h @@ -30,8 +30,24 @@ #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 + +static const long USEC_PER_SEC = 1000000; +static const long NSEC_PER_SEC = 1000000000; +static const int DEFAULT_USER_TIMEOUT = 60; // sec +static const long START_RTO = 1 * USEC_PER_SEC; // usec +static const long MAX_RTO = 3 * USEC_PER_SEC; // usec struct hdr { uint16_t src; // Source port @@ -71,9 +87,23 @@ static const char *strstate[] __attribute__((unused)) = { [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; @@ -96,11 +126,11 @@ struct utcp_connection { uint32_t last; uint32_t cwnd; + uint32_t ssthresh; } snd; struct { uint32_t nxt; - uint32_t wnd; uint32_t irs; } rcv; @@ -108,23 +138,26 @@ struct utcp_connection { // Timers - struct timeval conn_timeout; - struct timeval rtrx_timeout; + struct timespec conn_timeout; + struct timespec rtrx_timeout; + struct timespec rtt_start; + uint32_t rtt_seq; - // Send buffer + // Buffers - char *sndbuf; - uint32_t sndbufsize; - uint32_t maxsndbufsize; + struct buffer sndbuf; + struct buffer rcvbuf; + struct sack sacks[NSACKS]; // Per-socket options bool nodelay; bool keepalive; + bool shut_wr; // Congestion avoidance state - struct timeval tlast; + struct timespec tlast; uint64_t bandwidth; }; @@ -137,10 +170,21 @@ struct utcp { utcp_pre_accept_t pre_accept; utcp_send_t send; + // Packet buffer + + void *pkt; + // Global socket options - uint16_t mtu; - int timeout; + 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