rename /usr/man/man0/xx to /usr/man/man.template
[unix-history] / usr / src / sys / netinet / tcp_var.h
CommitLineData
8ae0e4b4 1/*
0880b18e 2 * Copyright (c) 1982, 1986 Regents of the University of California.
8ae0e4b4
KM
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
7cc62c26 6 * @(#)tcp_var.h 7.3 (Berkeley) %G%
8ae0e4b4 7 */
ad6d0022
BJ
8
9/*
10 * Kernel variables for tcp.
11 */
12
13/*
405c9168 14 * Tcp control block, one per tcp; fields:
ad6d0022 15 */
53a5409e 16struct tcpcb {
a6503abf
BJ
17 struct tcpiphdr *seg_next; /* sequencing queue */
18 struct tcpiphdr *seg_prev;
4aed14e3 19 short t_state; /* state of this connection */
a41e26c7 20 short t_timer[TCPT_NTIMERS]; /* tcp timers */
405c9168 21 short t_rxtshift; /* log(2) of rexmt exp. backoff */
a41e26c7 22 struct mbuf *t_tcpopt; /* tcp options */
faa26a98 23 u_short t_maxseg; /* maximum segment size */
4aed14e3 24 char t_force; /* 1 if forcing out a byte */
2ff61f9d 25 u_char t_flags;
6f638424
MK
26#define TF_ACKNOW 0x01 /* ack peer immediately */
27#define TF_DELACK 0x02 /* ack, but try to delay it */
28#define TF_NODELAY 0x04 /* don't delay packets to coalesce */
29#define TF_NOOPT 0x08 /* don't use tcp options */
faa26a98 30#define TF_SENTFIN 0x10 /* have sent FIN */
2ff61f9d
BJ
31 struct tcpiphdr *t_template; /* skeletal packet for transmit */
32 struct inpcb *t_inpcb; /* back pointer to internet pcb */
ad6d0022 33/*
2ff61f9d
BJ
34 * The following fields are used as in the protocol specification.
35 * See RFC783, Dec. 1981, page 21.
ad6d0022 36 */
2ff61f9d
BJ
37/* send sequence variables */
38 tcp_seq snd_una; /* send unacknowledged */
39 tcp_seq snd_nxt; /* send next */
2ff61f9d
BJ
40 tcp_seq snd_up; /* send urgent pointer */
41 tcp_seq snd_wl1; /* window update seg seq number */
42 tcp_seq snd_wl2; /* window update seg ack number */
43 tcp_seq iss; /* initial send sequence number */
4aed14e3 44 u_short snd_wnd; /* send window */
2ff61f9d 45/* receive sequence variables */
6f638424 46 u_short rcv_wnd; /* receive window */
4aed14e3 47 tcp_seq rcv_nxt; /* receive next */
2ff61f9d
BJ
48 tcp_seq rcv_up; /* receive urgent pointer */
49 tcp_seq irs; /* initial receive sequence number */
ad6d0022 50/*
2ff61f9d 51 * Additional variables for this implementation.
ad6d0022 52 */
2ff61f9d 53/* receive variables */
a6503abf
BJ
54 tcp_seq rcv_adv; /* advertised window */
55/* retransmit variables */
a41e26c7 56 tcp_seq snd_max; /* highest sequence number sent
05586739
MK
57 * used to recognize retransmits
58 */
59/* congestion control (for source quench) */
60 u_short snd_cwnd; /* congestion-controlled window */
7cc62c26
MK
61/*
62 * transmit timing stuff.
63 * srtt and rttvar are stored as fixed point; for convenience in smoothing,
64 * srtt has 3 bits to the right of the binary point, rttvar has 2.
65 */
405c9168
BJ
66 short t_idle; /* inactivity time */
67 short t_rtt; /* round trip time */
22b0776e 68 u_short max_rcvd; /* most peer has sent into window */
405c9168 69 tcp_seq t_rtseq; /* sequence number being timed */
7cc62c26
MK
70 short t_srtt; /* smoothed round-trip time */
71 short t_rttvar; /* variance in round-trip time */
18a438b6 72 u_short max_sndwnd; /* largest window peer has offered */
8b5a83bb
BJ
73/* out-of-band data */
74 char t_oobflags; /* have some */
b2db9217 75 char t_iobc; /* input character */
8b5a83bb 76#define TCPOOB_HAVEDATA 0x01
22b0776e 77#define TCPOOB_HADDATA 0x02
2ff61f9d 78};
ad6d0022 79
2ff61f9d
BJ
80#define intotcpcb(ip) ((struct tcpcb *)(ip)->inp_ppcb)
81#define sototcpcb(so) (intotcpcb(sotoinpcb(so)))
ad6d0022 82
3b52afc5
MK
83/*
84 * TCP statistics.
85 * Many of these should be kept per connection,
86 * but that's inconvenient at the moment.
87 */
2b4b57cd 88struct tcpstat {
3b52afc5
MK
89 u_long tcps_connattempt; /* connections initiated */
90 u_long tcps_accepts; /* connections accepted */
91 u_long tcps_connects; /* connections established */
92 u_long tcps_drops; /* connections dropped */
93 u_long tcps_conndrops; /* embryonic connections dropped */
94 u_long tcps_closed; /* conn. closed (includes drops) */
95 u_long tcps_segstimed; /* segs where we tried to get rtt */
96 u_long tcps_rttupdated; /* times we succeeded */
97 u_long tcps_delack; /* delayed acks sent */
98 u_long tcps_timeoutdrop; /* conn. dropped in rxmt timeout */
99 u_long tcps_rexmttimeo; /* retransmit timeouts */
100 u_long tcps_persisttimeo; /* persist timeouts */
101 u_long tcps_keeptimeo; /* keepalive timeouts */
102 u_long tcps_keepprobe; /* keepalive probes sent */
103 u_long tcps_keepdrops; /* connections dropped in keepalive */
104
105 u_long tcps_sndtotal; /* total packets sent */
106 u_long tcps_sndpack; /* data packets sent */
107 u_long tcps_sndbyte; /* data bytes sent */
108 u_long tcps_sndrexmitpack; /* data packets retransmitted */
109 u_long tcps_sndrexmitbyte; /* data bytes retransmitted */
110 u_long tcps_sndacks; /* ack-only packets sent */
111 u_long tcps_sndprobe; /* window probes sent */
112 u_long tcps_sndurg; /* packets sent with URG only */
113 u_long tcps_sndwinup; /* window update-only packets sent */
114 u_long tcps_sndctrl; /* control (SYN|FIN|RST) packets sent */
115
116 u_long tcps_rcvtotal; /* total packets received */
117 u_long tcps_rcvpack; /* packets received in sequence */
118 u_long tcps_rcvbyte; /* bytes received in sequence */
119 u_long tcps_rcvbadsum; /* packets received with ccksum errs */
120 u_long tcps_rcvbadoff; /* packets received with bad offset */
121 u_long tcps_rcvshort; /* packets received too short */
122 u_long tcps_rcvduppack; /* duplicate-only packets received */
123 u_long tcps_rcvdupbyte; /* duplicate-only bytes received */
124 u_long tcps_rcvpartduppack; /* packets with some duplicate data */
125 u_long tcps_rcvpartdupbyte; /* dup. bytes in part-dup. packets */
126 u_long tcps_rcvoopack; /* out-of-order packets received */
127 u_long tcps_rcvoobyte; /* out-of-order bytes received */
128 u_long tcps_rcvpackafterwin; /* packets with data after window */
129 u_long tcps_rcvbyteafterwin; /* bytes rcvd after window */
130 u_long tcps_rcvafterclose; /* packets rcvd after "close" */
131 u_long tcps_rcvwinprobe; /* rcvd window probe packets */
132 u_long tcps_rcvdupack; /* rcvd duplicate acks */
133 u_long tcps_rcvacktoomuch; /* rcvd acks for unsent data */
134 u_long tcps_rcvackpack; /* rcvd ack packets */
135 u_long tcps_rcvackbyte; /* bytes acked by rcvd acks */
136 u_long tcps_rcvwinupd; /* rcvd window update packets */
2b4b57cd
BJ
137};
138
ad6d0022 139#ifdef KERNEL
2ff61f9d
BJ
140struct inpcb tcb; /* head of queue of active tcpcb's */
141struct tcpstat tcpstat; /* tcp statistics */
53a5409e 142struct tcpiphdr *tcp_template();
0e3936fa
SL
143struct tcpcb *tcp_close(), *tcp_drop();
144struct tcpcb *tcp_timers(), *tcp_disconnect(), *tcp_usrclosed();
ad6d0022 145#endif