Commit | Line | Data |
---|---|---|
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 | 10 | struct 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 |
78 | struct 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 |
87 | struct inpcb tcb; /* head of queue of active tcpcb's */ |
88 | struct tcpstat tcpstat; /* tcp statistics */ | |
53a5409e | 89 | struct tcpiphdr *tcp_template(); |
ad6d0022 | 90 | #endif |