#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
[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;
+ uint32_t flags;
bool reapable;
// Callbacks
utcp_recv_t recv;
+ utcp_poll_t poll;
// TCP State
struct timeval conn_timeout;
struct timeval rtrx_timeout;
+ struct timeval rtt_start;
+ uint32_t rtt_seq;
- // Send buffer
+ // Buffers
- char *sndbuf;
- uint32_t sndbufused;
- 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
// Global socket options
uint16_t mtu;
- int timeout;
+ int timeout; // sec
+
+ // RTT variables
+
+ uint32_t srtt; // usec
+ uint32_t rttvar; // usec
+ uint32_t rto; // usec
// Connection management