out-of-band fixed up
[unix-history] / usr / src / sys / netinet / tcp_var.h
CommitLineData
b2db9217 1/* tcp_var.h 4.16 82/01/18 */
ad6d0022
BJ
2
3/*
4 * Kernel variables for tcp.
5 */
6
7/*
405c9168 8 * Tcp control block, one per tcp; fields:
ad6d0022 9 */
53a5409e 10struct tcpcb {
a6503abf
BJ
11 struct tcpiphdr *seg_next; /* sequencing queue */
12 struct tcpiphdr *seg_prev;
4aed14e3 13 short t_state; /* state of this connection */
a41e26c7 14 short t_timer[TCPT_NTIMERS]; /* tcp timers */
405c9168 15 short t_rxtshift; /* log(2) of rexmt exp. backoff */
a41e26c7
BJ
16 struct mbuf *t_tcpopt; /* tcp options */
17 struct mbuf *t_ipopt; /* ip options */
18 short t_maxseg; /* maximum segment size */
4aed14e3 19 char t_force; /* 1 if forcing out a byte */
2ff61f9d 20 u_char t_flags;
a41e26c7
BJ
21#define TF_ACKNOW 0x01 /* ack peer immediately */
22#define TF_DELACK 0x02 /* ack, but try to delay it */
8b5a83bb
BJ
23#define TF_DONTKEEP 0x04 /* don't use keep-alives */
24#define TF_NOOPT 0x08 /* don't use tcp options */
25#ifdef TCPTRUEOOB
26#define TF_DOOOB 0x10 /* do use out of band data */
27#endif
2ff61f9d
BJ
28 struct tcpiphdr *t_template; /* skeletal packet for transmit */
29 struct inpcb *t_inpcb; /* back pointer to internet pcb */
ad6d0022 30/*
2ff61f9d
BJ
31 * The following fields are used as in the protocol specification.
32 * See RFC783, Dec. 1981, page 21.
ad6d0022 33 */
2ff61f9d
BJ
34/* send sequence variables */
35 tcp_seq snd_una; /* send unacknowledged */
36 tcp_seq snd_nxt; /* send next */
2ff61f9d
BJ
37 tcp_seq snd_up; /* send urgent pointer */
38 tcp_seq snd_wl1; /* window update seg seq number */
39 tcp_seq snd_wl2; /* window update seg ack number */
40 tcp_seq iss; /* initial send sequence number */
4aed14e3 41 u_short snd_wnd; /* send window */
2ff61f9d 42/* receive sequence variables */
f3800948 43 short rcv_wnd; /* receive window */
4aed14e3 44 tcp_seq rcv_nxt; /* receive next */
2ff61f9d
BJ
45 tcp_seq rcv_up; /* receive urgent pointer */
46 tcp_seq irs; /* initial receive sequence number */
ad6d0022 47/*
2ff61f9d 48 * Additional variables for this implementation.
ad6d0022 49 */
2ff61f9d 50/* receive variables */
a6503abf
BJ
51 tcp_seq rcv_adv; /* advertised window */
52/* retransmit variables */
a41e26c7 53 tcp_seq snd_max; /* highest sequence number sent
a6503abf 54 used to recognize retransmits */
405c9168
BJ
55/* transmit timing stuff */
56 short t_idle; /* inactivity time */
57 short t_rtt; /* round trip time */
58 tcp_seq t_rtseq; /* sequence number being timed */
59 float t_srtt; /* smoothed round-trip time */
8b5a83bb
BJ
60/* out-of-band data */
61 char t_oobflags; /* have some */
b2db9217 62 char t_iobc; /* input character */
8b5a83bb
BJ
63#define TCPOOB_HAVEDATA 0x01
64
65#ifdef TCPTRUEOOB
66#define TCPOOB_OWEACK 0x02
67#define TCPOOB_NEEDACK 0x04
8b5a83bb 68 u_char t_iobseq; /* input receive sequence number */
b2db9217 69 tcp_seq t_oobmark; /* output mark position */
8b5a83bb
BJ
70 char t_oobc; /* output character */
71 u_char t_oobseq; /* output transmit sequence number */
72#endif
2ff61f9d 73};
ad6d0022 74
2ff61f9d
BJ
75#define intotcpcb(ip) ((struct tcpcb *)(ip)->inp_ppcb)
76#define sototcpcb(so) (intotcpcb(sotoinpcb(so)))
ad6d0022 77
2b4b57cd
BJ
78struct tcpstat {
79 int tcps_badsum;
80 int tcps_badoff;
81 int tcps_hdrops;
82 int tcps_badsegs;
83 int tcps_unack;
84};
85
ad6d0022 86#ifdef KERNEL
2ff61f9d
BJ
87struct inpcb tcb; /* head of queue of active tcpcb's */
88struct tcpstat tcpstat; /* tcp statistics */
53a5409e 89struct tcpiphdr *tcp_template();
ad6d0022 90#endif