]> git.meshlink.io Git - utcp/blobdiff - utcp_priv.h
Handle channel closure during a receive callback when the ringbuffer wraps.
[utcp] / utcp_priv.h
index 69f1b0da5347371649da4dbaa92973cfed0617eb..197fd2685a32416f46bc87652ddae5bb27664553 100644 (file)
 #define ACK 2
 #define FIN 4
 #define RST 8
 #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 NSACKS 4
 #define DEFAULT_SNDBUFSIZE 4096
 #define DEFAULT_RCVBUFSIZE 0
 #define DEFAULT_MAXRCVBUFSIZE 131072
 
 #define DEFAULT_RCVBUFSIZE 0
 #define DEFAULT_MAXRCVBUFSIZE 131072
 
+#define MAX_UNRELIABLE_SIZE 65536
+#define DEFAULT_MTU 1000
+
+#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
        uint16_t dst; // Destination port
 struct hdr {
        uint16_t src; // Source port
        uint16_t dst; // Destination port
@@ -76,6 +91,7 @@ static const char *strstate[] __attribute__((unused)) = {
 
 struct buffer {
        char *data;
 
 struct buffer {
        char *data;
+       uint32_t offset;
        uint32_t used;
        uint32_t size;
        uint32_t maxsize;
        uint32_t used;
        uint32_t size;
        uint32_t maxsize;
@@ -89,8 +105,10 @@ struct sack {
 struct utcp_connection {
        void *priv;
        struct utcp *utcp;
 struct utcp_connection {
        void *priv;
        struct utcp *utcp;
+       uint32_t flags;
 
        bool reapable;
 
        bool reapable;
+       bool do_poll;
 
        // Callbacks
 
 
        // Callbacks
 
@@ -111,11 +129,11 @@ struct utcp_connection {
 
                uint32_t last;
                uint32_t cwnd;
 
                uint32_t last;
                uint32_t cwnd;
+               uint32_t ssthresh;
        } snd;
 
        struct {
                uint32_t nxt;
        } snd;
 
        struct {
                uint32_t nxt;
-               uint32_t wnd;
                uint32_t irs;
        } rcv;
 
                uint32_t irs;
        } rcv;
 
@@ -123,11 +141,20 @@ struct utcp_connection {
 
        // Timers
 
 
        // 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;
+
+       // RTT variables
+
+       uint32_t srtt; // usec
+       uint32_t rttvar; // usec
+       uint32_t rto; // usec
 
        // Buffers
 
 
        // Buffers
 
+       uint32_t prev_free;
        struct buffer sndbuf;
        struct buffer rcvbuf;
        struct sack sacks[NSACKS];
        struct buffer sndbuf;
        struct buffer rcvbuf;
        struct sack sacks[NSACKS];
@@ -136,10 +163,11 @@ struct utcp_connection {
 
        bool nodelay;
        bool keepalive;
 
        bool nodelay;
        bool keepalive;
+       bool shut_wr;
 
        // Congestion avoidance state
 
 
        // Congestion avoidance state
 
-       struct timeval tlast;
+       struct timespec tlast;
        uint64_t bandwidth;
 };
 
        uint64_t bandwidth;
 };
 
@@ -150,12 +178,18 @@ struct utcp {
 
        utcp_accept_t accept;
        utcp_pre_accept_t pre_accept;
 
        utcp_accept_t accept;
        utcp_pre_accept_t pre_accept;
+       utcp_retransmit_t retransmit;
        utcp_send_t send;
 
        utcp_send_t send;
 
+       // Packet buffer
+
+       void *pkt;
+
        // Global socket options
 
        // 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
 
        // Connection management
 
 
        // Connection management