X-Git-Url: http://git.meshlink.io/?p=utcp;a=blobdiff_plain;f=utcp_priv.h;h=197fd2685a32416f46bc87652ddae5bb27664553;hp=24f4158318ddccd8a4a586b72420fbe87de172c2;hb=HEAD;hpb=e7e607d6d1b4e53f6f2a6094c02240e4fd8f59d4 diff --git a/utcp_priv.h b/utcp_priv.h index 24f4158..197fd26 100644 --- a/utcp_priv.h +++ b/utcp_priv.h @@ -29,6 +29,12 @@ #define ACK 2 #define FIN 4 #define RST 8 +#define MF 16 + +#define AUX_INIT 1 +#define AUX_FRAME 2 +#define AUX_SAK 3 +#define AUX_TIMESTAMP 4 #define NSACKS 4 #define DEFAULT_SNDBUFSIZE 4096 @@ -36,12 +42,14 @@ #define DEFAULT_RCVBUFSIZE 0 #define DEFAULT_MAXRCVBUFSIZE 131072 +#define MAX_UNRELIABLE_SIZE 65536 #define DEFAULT_MTU 1000 -#define DEFAULT_USER_TIMEOUT 60 // s -#define CLOCK_GRANULARITY 1000 // us -#define START_RTO 1000000 // us -#define MAX_RTO 3000000 // us +#define USEC_PER_SEC 1000000L +#define NSEC_PER_SEC 1000000000L +#define DEFAULT_USER_TIMEOUT 60 +#define START_RTO (1 * USEC_PER_SEC) +#define MAX_RTO (3 * USEC_PER_SEC) struct hdr { uint16_t src; // Source port @@ -83,6 +91,7 @@ static const char *strstate[] __attribute__((unused)) = { struct buffer { char *data; + uint32_t offset; uint32_t used; uint32_t size; uint32_t maxsize; @@ -96,8 +105,10 @@ struct sack { struct utcp_connection { void *priv; struct utcp *utcp; + uint32_t flags; bool reapable; + bool do_poll; // Callbacks @@ -118,11 +129,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; @@ -130,13 +141,20 @@ struct utcp_connection { // Timers - struct timeval conn_timeout; - struct timeval rtrx_timeout; - struct timeval rtt_start; + struct timespec conn_timeout; + struct timespec rtrx_timeout; + struct timespec rtt_start; uint32_t rtt_seq; + // RTT variables + + uint32_t srtt; // usec + uint32_t rttvar; // usec + uint32_t rto; // usec + // Buffers + uint32_t prev_free; struct buffer sndbuf; struct buffer rcvbuf; struct sack sacks[NSACKS]; @@ -145,10 +163,11 @@ struct utcp_connection { bool nodelay; bool keepalive; + bool shut_wr; // Congestion avoidance state - struct timeval tlast; + struct timespec tlast; uint64_t bandwidth; }; @@ -159,18 +178,18 @@ struct utcp { utcp_accept_t accept; utcp_pre_accept_t pre_accept; + utcp_retransmit_t retransmit; utcp_send_t send; - // Global socket options + // Packet buffer - uint16_t mtu; - int timeout; // s + void *pkt; - // RTT variables + // Global socket options - uint32_t srtt; // us - uint32_t rttvar; // us - uint32_t rto; // us + 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 // Connection management