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