-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 */
+struct tcpcb {
+ struct tcpiphdr *seg_next; /* sequencing queue */
+ struct tcpiphdr *seg_prev;
+ short t_state; /* state of this connection */
+ short t_timer[TCPT_NTIMERS]; /* tcp timers */
+ short t_rxtshift; /* log(2) of rexmt exp. backoff */
+ struct mbuf *t_tcpopt; /* tcp options */
+ struct mbuf *t_ipopt; /* ip options */
+ short t_maxseg; /* maximum segment size */
+ char t_force; /* 1 if forcing out a byte */
+ u_char t_flags;
+#define TF_ACKNOW 0x01 /* ack peer immediately */
+#define TF_DELACK 0x02 /* ack, but try to delay it */
+#define TF_DONTKEEP 0x04 /* don't use keep-alives */
+#define TF_NOOPT 0x08 /* don't use tcp options */
+ struct tcpiphdr *t_template; /* skeletal packet for transmit */
+ struct inpcb *t_inpcb; /* back pointer to internet pcb */