#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
#define DEFAULT_RCVBUFSIZE 0
#define DEFAULT_MAXRCVBUFSIZE 131072
+#define MAX_UNRELIABLE_SIZE 65536
#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
+#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
struct buffer {
char *data;
+ uint32_t offset;
uint32_t used;
uint32_t size;
uint32_t maxsize;
uint32_t flags;
bool reapable;
+ bool do_poll;
// Callbacks
uint32_t last;
uint32_t cwnd;
+ uint32_t ssthresh;
} snd;
struct {
uint32_t nxt;
- uint32_t wnd;
uint32_t irs;
} rcv;
// 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];
bool nodelay;
bool keepalive;
+ bool shut_wr;
// Congestion avoidance state
- struct timeval tlast;
+ struct timespec tlast;
uint64_t bandwidth;
};
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; // sec
+ void *pkt;
- // RTT variables
+ // Global socket options
- uint32_t srtt; // usec
- uint32_t rttvar; // usec
- uint32_t rto; // usec
+ 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