date and time created 81/11/08 16:36:27 by wnj
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 9 Nov 1981 08:36:27 +0000 (00:36 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 9 Nov 1981 08:36:27 +0000 (00:36 -0800)
SCCS-vsn: sys/netinet/tcp_var.h 4.1

usr/src/sys/netinet/tcp_var.h [new file with mode: 0644]

diff --git a/usr/src/sys/netinet/tcp_var.h b/usr/src/sys/netinet/tcp_var.h
new file mode 100644 (file)
index 0000000..c97a58c
--- /dev/null
@@ -0,0 +1,153 @@
+/*     tcp_var.h       4.1     81/11/08        */
+
+/*
+ * Kernel variables for tcp.
+ */
+
+/*
+ * Tcp control block.
+ */
+struct tcb {
+       struct tcb_hd {
+               struct  th *seg_next,*seg_prev;         /* seq queue */
+               struct  tcb *tcb_next,*tcb_prev;        /* other tcb's */
+       } tcb_hd;
+       struct  th *t_template;         /* skeletal packet for transmit */
+       struct  socket *t_socket;       /* back pointer to socket */
+       struct  mbuf *seg_unack;        /* unacked message queue */
+       struct  host *t_host;
+       short   seqcnt;
+       short   xxx;
+       seq_t   iss;                    /* initial send seq # */
+       seq_t   irs;                    /* initial recv seq # */
+       seq_t   rcv_urp;                /* rcv urgent pointer */
+       seq_t   rcv_nxt;                /* next seq # to rcv */
+       seq_t   rcv_end;                /* rcv eol pointer */
+       seq_t   snd_off;                /* seq # of first datum in send buf */
+       seq_t   seq_fin;                /* seq # of FIN sent */
+       seq_t   snd_end;                /* send eol pointer */
+       seq_t   snd_urp;                /* snd urgent pointer */
+       seq_t   snd_lst;                /* seq # of last sent datum */
+       seq_t   snd_nxt;                /* seq # of next datum to send */
+       seq_t   snd_una;                /* seq # of first unacked datum */
+       seq_t   snd_wl;                 /* seq # of last sent window */
+       seq_t   snd_hi;                 /* highest seq # sent */
+       seq_t   snd_wnd;                /* send window max */
+       seq_t   t_rexmt_val;            /* val saved in rexmt timer */
+       seq_t   t_rtl_val;              /* val saved in rexmt too long timer */
+       seq_t   t_xmt_val;              /* seq # sent when xmt timer started */
+       seq_t   rcv_adv;                /* advertised window */
+       u_short tc_flags;               /* flags and state; see below */
+       u_short t_options;
+#define        TO_EOL          0x01            /* eol mode */
+#define        TO_URG          0x02            /* urgent mode */
+       u_short t_lport;                /* local port */
+       u_short t_fport;                /* foreign port */
+       u_char  t_state;                /* state of this connection */
+       u_char  t_xmtime;               /* current rexmt time */
+/* timers... must be in order */
+       short   t_init;                 /* initialization too long */
+       short   t_rexmt;                /* retransmission */
+       short   t_rexmttl;              /* retransmit too long */
+       short   t_persist;              /* retransmit persistance */
+       short   t_finack;               /* fin acknowledged */
+       short   t_xmt;                  /* round trip transmission time */
+/* end timers */
+};
+
+/* tc_flags values */
+#define        TC_ACK_DUE      0x0001          /* must we send ACK */
+#define        TC_CANCELLED    0x0002          /* retransmit timer cancelled */
+#define        TC_DROPPED_TXT  0x0004          /* dropped incoming data */
+#define        TC_FIN_RCVD     0x0008          /* FIN received */
+#define        TC_FORCE_ONE    0x0010          /* force sending of one byte */
+#define        TC_NEW_WINDOW   0x0020          /* received new window size */
+#define        TC_REXMT        0x0040          /* this msg is a retransmission */
+#define        TC_SND_FIN      0x0080          /* FIN should be sent */
+#define        TC_SND_RST      0x0100          /* RST should be sent */
+#define        TC_SND_URG      0x0200          /* urgent data to send */
+#define        TC_SYN_ACKED    0x0400          /* SYN has been ACKed */
+#define        TC_SYN_RCVD     0x0800          /* SYN has been received */
+#define        TC_USR_CLOSED   0x1000          /* user has closed connection */
+#define        TC_WAITED_2_ML  0x2000          /* wait time for FIN ACK is up */
+#define        TC_NET_KEEP     0x4000          /* don't free this net input */
+#define        TC_USR_ABORT    0x8000          /* user has closed and does not expect
+                                          to receive any more data */
+/*
+ * TCP timers.
+ */
+#define        TINIT           0
+#define        TREXMT          1
+#define        TREXMTTL        2
+#define        TPERSIST        3
+#define        TFINACK         4
+#define        TNTIMERS        5
+
+/*
+ * Tcp machine predicates
+ */
+#define        ack_ok(x, y) \
+    (((y)->th_flags&TH_ACK)==0 || \
+      ((x)->iss < (y)->t_ackno && (y)->t_ackno <= (x)->snd_hi))
+
+#define        syn_ok(x, y) \
+    ((y)->th_flags&TH_SYN)
+
+#define        ack_fin(x, y) \
+    ((x)->seq_fin > (x)->iss && (y)->t_ackno > (x)->seq_fin)
+
+#define        rcv_empty(x) \
+    (((x)->tc_flags&TC_USR_ABORT) || \
+      ((x)->t_socket->so_rcv.sb_mb == NULL && \
+       (x)->tcb_hd.seg_next == (x)->tcb_hd.seg_prev))
+
+#define        ISSINCR         128             /* increment for iss each second */
+#define        TCPSIZE         20              /* size of TCP leader (bytes) */
+
+/*
+ * THESE NEED TO BE JUSTIFIED!
+ *
+ * *2 here is because slow timeout routine called every 1/2 second.
+ */
+#define        T_2ML           (10*2)          /* 2*maximum packet lifetime */
+#define        T_PERS          (5*2)           /* persist time */
+#define        T_REXMT         (1*2)           /* base for retransmission time */
+#define        T_REXMTTL       (30*2)          /* retransmit too long timeout */
+#define        T_REMAX         (30*2)          /* maximum retransmission time */
+
+#ifdef TCPDEBUG
+#define        TDBSIZE         50
+/*
+ * Tcp debugging record.
+ */
+struct tcp_debug {
+       long    td_tod;                 /* time of day */
+       struct  tcb *td_tcb;            /* -> tcb */
+       char    td_old;                 /* old state */
+       char    td_inp;                 /* input */
+       char    td_tim;                 /* timer id */
+       char    td_new;                 /* new state */
+       seq_t   td_sno;                 /* seq_t number */
+       seq_t   td_ano;                 /* acknowledgement */
+       u_short td_wno;                 /* window */
+       u_short td_lno;                 /* length */
+       u_char  td_flg;                 /* message flags */
+};
+#endif
+
+#ifdef KERNEL
+struct tcb_hd tcb;                     /* tcp tcb list head */
+seq_t  tcp_iss;                        /* tcp initial send seq # */
+int    tcpconsdebug;                   /* set to 1 traces on console */
+#ifdef TCPDEBUG
+struct tcp_debug tcp_debug[TDBSIZE];
+#endif
+int    tdbx;                   /* rotating index into tcp_debug */
+struct th *tcp_template();
+#endif
+
+#define        SEQ_LT(a,b)     ((int)((a)-(b)) < 0)
+#define        SEQ_LEQ(a,b)    ((int)((a)-(b)) <= 0)
+#define        SEQ_GT(a,b)     ((int)((a)-(b)) > 0)
+#define        SEQ_GEQ(a,b)    ((int)((a)-(b)) >= 0)
+struct th *tcp_template();