1*de1e4e89SAndroid Build Coastguard Worker /* 2*de1e4e89SAndroid Build Coastguard Worker * Copyright (c) 1982, 1986, 1993 3*de1e4e89SAndroid Build Coastguard Worker * The Regents of the University of California. All rights reserved. 4*de1e4e89SAndroid Build Coastguard Worker * 5*de1e4e89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*de1e4e89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*de1e4e89SAndroid Build Coastguard Worker * are met: 8*de1e4e89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 9*de1e4e89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*de1e4e89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 11*de1e4e89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 12*de1e4e89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 13*de1e4e89SAndroid Build Coastguard Worker * 4. Neither the name of the University nor the names of its contributors 14*de1e4e89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 15*de1e4e89SAndroid Build Coastguard Worker * without specific prior written permission. 16*de1e4e89SAndroid Build Coastguard Worker * 17*de1e4e89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18*de1e4e89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*de1e4e89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*de1e4e89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21*de1e4e89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*de1e4e89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23*de1e4e89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*de1e4e89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25*de1e4e89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26*de1e4e89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27*de1e4e89SAndroid Build Coastguard Worker * SUCH DAMAGE. 28*de1e4e89SAndroid Build Coastguard Worker * 29*de1e4e89SAndroid Build Coastguard Worker * @(#)tcp.h 8.1 (Berkeley) 6/10/93 30*de1e4e89SAndroid Build Coastguard Worker */ 31*de1e4e89SAndroid Build Coastguard Worker 32*de1e4e89SAndroid Build Coastguard Worker #ifndef _NETINET_TCP_H 33*de1e4e89SAndroid Build Coastguard Worker #define _NETINET_TCP_H 1 34*de1e4e89SAndroid Build Coastguard Worker 35*de1e4e89SAndroid Build Coastguard Worker #include <features.h> 36*de1e4e89SAndroid Build Coastguard Worker 37*de1e4e89SAndroid Build Coastguard Worker /* 38*de1e4e89SAndroid Build Coastguard Worker * User-settable options (used with setsockopt). 39*de1e4e89SAndroid Build Coastguard Worker */ 40*de1e4e89SAndroid Build Coastguard Worker #define TCP_NODELAY 1 /* Don't delay send to coalesce packets */ 41*de1e4e89SAndroid Build Coastguard Worker #define TCP_MAXSEG 2 /* Set maximum segment size */ 42*de1e4e89SAndroid Build Coastguard Worker #define TCP_CORK 3 /* Control sending of partial frames */ 43*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPIDLE 4 /* Start keeplives after this period */ 44*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPINTVL 5 /* Interval between keepalives */ 45*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPCNT 6 /* Number of keepalives before death */ 46*de1e4e89SAndroid Build Coastguard Worker #define TCP_SYNCNT 7 /* Number of SYN retransmits */ 47*de1e4e89SAndroid Build Coastguard Worker #define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ 48*de1e4e89SAndroid Build Coastguard Worker #define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ 49*de1e4e89SAndroid Build Coastguard Worker #define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ 50*de1e4e89SAndroid Build Coastguard Worker #define TCP_INFO 11 /* Information about this connection. */ 51*de1e4e89SAndroid Build Coastguard Worker #define TCP_QUICKACK 12 /* Bock/reenable quick ACKs. */ 52*de1e4e89SAndroid Build Coastguard Worker #define TCP_CONGESTION 13 /* Congestion control algorithm. */ 53*de1e4e89SAndroid Build Coastguard Worker 54*de1e4e89SAndroid Build Coastguard Worker #ifdef __USE_MISC 55*de1e4e89SAndroid Build Coastguard Worker # include <sys/types.h> 56*de1e4e89SAndroid Build Coastguard Worker 57*de1e4e89SAndroid Build Coastguard Worker # ifdef __FAVOR_BSD 58*de1e4e89SAndroid Build Coastguard Worker typedef u_int32_t tcp_seq; 59*de1e4e89SAndroid Build Coastguard Worker /* 60*de1e4e89SAndroid Build Coastguard Worker * TCP header. 61*de1e4e89SAndroid Build Coastguard Worker * Per RFC 793, September, 1981. 62*de1e4e89SAndroid Build Coastguard Worker */ 63*de1e4e89SAndroid Build Coastguard Worker struct tcphdr 64*de1e4e89SAndroid Build Coastguard Worker { 65*de1e4e89SAndroid Build Coastguard Worker u_int16_t th_sport; /* source port */ 66*de1e4e89SAndroid Build Coastguard Worker u_int16_t th_dport; /* destination port */ 67*de1e4e89SAndroid Build Coastguard Worker tcp_seq th_seq; /* sequence number */ 68*de1e4e89SAndroid Build Coastguard Worker tcp_seq th_ack; /* acknowledgement number */ 69*de1e4e89SAndroid Build Coastguard Worker # if __BYTE_ORDER == __LITTLE_ENDIAN 70*de1e4e89SAndroid Build Coastguard Worker u_int8_t th_x2:4; /* (unused) */ 71*de1e4e89SAndroid Build Coastguard Worker u_int8_t th_off:4; /* data offset */ 72*de1e4e89SAndroid Build Coastguard Worker # endif 73*de1e4e89SAndroid Build Coastguard Worker # if __BYTE_ORDER == __BIG_ENDIAN 74*de1e4e89SAndroid Build Coastguard Worker u_int8_t th_off:4; /* data offset */ 75*de1e4e89SAndroid Build Coastguard Worker u_int8_t th_x2:4; /* (unused) */ 76*de1e4e89SAndroid Build Coastguard Worker # endif 77*de1e4e89SAndroid Build Coastguard Worker u_int8_t th_flags; 78*de1e4e89SAndroid Build Coastguard Worker # define TH_FIN 0x01 79*de1e4e89SAndroid Build Coastguard Worker # define TH_SYN 0x02 80*de1e4e89SAndroid Build Coastguard Worker # define TH_RST 0x04 81*de1e4e89SAndroid Build Coastguard Worker # define TH_PUSH 0x08 82*de1e4e89SAndroid Build Coastguard Worker # define TH_ACK 0x10 83*de1e4e89SAndroid Build Coastguard Worker # define TH_URG 0x20 84*de1e4e89SAndroid Build Coastguard Worker u_int16_t th_win; /* window */ 85*de1e4e89SAndroid Build Coastguard Worker u_int16_t th_sum; /* checksum */ 86*de1e4e89SAndroid Build Coastguard Worker u_int16_t th_urp; /* urgent pointer */ 87*de1e4e89SAndroid Build Coastguard Worker }; 88*de1e4e89SAndroid Build Coastguard Worker 89*de1e4e89SAndroid Build Coastguard Worker # else /* !__FAVOR_BSD */ 90*de1e4e89SAndroid Build Coastguard Worker struct tcphdr 91*de1e4e89SAndroid Build Coastguard Worker { 92*de1e4e89SAndroid Build Coastguard Worker u_int16_t source; 93*de1e4e89SAndroid Build Coastguard Worker u_int16_t dest; 94*de1e4e89SAndroid Build Coastguard Worker u_int32_t seq; 95*de1e4e89SAndroid Build Coastguard Worker u_int32_t ack_seq; 96*de1e4e89SAndroid Build Coastguard Worker # if __BYTE_ORDER == __LITTLE_ENDIAN 97*de1e4e89SAndroid Build Coastguard Worker u_int16_t res1:4; 98*de1e4e89SAndroid Build Coastguard Worker u_int16_t doff:4; 99*de1e4e89SAndroid Build Coastguard Worker u_int16_t fin:1; 100*de1e4e89SAndroid Build Coastguard Worker u_int16_t syn:1; 101*de1e4e89SAndroid Build Coastguard Worker u_int16_t rst:1; 102*de1e4e89SAndroid Build Coastguard Worker u_int16_t psh:1; 103*de1e4e89SAndroid Build Coastguard Worker u_int16_t ack:1; 104*de1e4e89SAndroid Build Coastguard Worker u_int16_t urg:1; 105*de1e4e89SAndroid Build Coastguard Worker u_int16_t res2:2; 106*de1e4e89SAndroid Build Coastguard Worker # elif __BYTE_ORDER == __BIG_ENDIAN 107*de1e4e89SAndroid Build Coastguard Worker u_int16_t doff:4; 108*de1e4e89SAndroid Build Coastguard Worker u_int16_t res1:4; 109*de1e4e89SAndroid Build Coastguard Worker u_int16_t res2:2; 110*de1e4e89SAndroid Build Coastguard Worker u_int16_t urg:1; 111*de1e4e89SAndroid Build Coastguard Worker u_int16_t ack:1; 112*de1e4e89SAndroid Build Coastguard Worker u_int16_t psh:1; 113*de1e4e89SAndroid Build Coastguard Worker u_int16_t rst:1; 114*de1e4e89SAndroid Build Coastguard Worker u_int16_t syn:1; 115*de1e4e89SAndroid Build Coastguard Worker u_int16_t fin:1; 116*de1e4e89SAndroid Build Coastguard Worker # else 117*de1e4e89SAndroid Build Coastguard Worker # error "Adjust your <bits/endian.h> defines" 118*de1e4e89SAndroid Build Coastguard Worker # endif 119*de1e4e89SAndroid Build Coastguard Worker u_int16_t window; 120*de1e4e89SAndroid Build Coastguard Worker u_int16_t check; 121*de1e4e89SAndroid Build Coastguard Worker u_int16_t urg_ptr; 122*de1e4e89SAndroid Build Coastguard Worker }; 123*de1e4e89SAndroid Build Coastguard Worker # endif /* __FAVOR_BSD */ 124*de1e4e89SAndroid Build Coastguard Worker 125*de1e4e89SAndroid Build Coastguard Worker enum 126*de1e4e89SAndroid Build Coastguard Worker { 127*de1e4e89SAndroid Build Coastguard Worker TCP_ESTABLISHED = 1, 128*de1e4e89SAndroid Build Coastguard Worker TCP_SYN_SENT, 129*de1e4e89SAndroid Build Coastguard Worker TCP_SYN_RECV, 130*de1e4e89SAndroid Build Coastguard Worker TCP_FIN_WAIT1, 131*de1e4e89SAndroid Build Coastguard Worker TCP_FIN_WAIT2, 132*de1e4e89SAndroid Build Coastguard Worker TCP_TIME_WAIT, 133*de1e4e89SAndroid Build Coastguard Worker TCP_CLOSE, 134*de1e4e89SAndroid Build Coastguard Worker TCP_CLOSE_WAIT, 135*de1e4e89SAndroid Build Coastguard Worker TCP_LAST_ACK, 136*de1e4e89SAndroid Build Coastguard Worker TCP_LISTEN, 137*de1e4e89SAndroid Build Coastguard Worker TCP_CLOSING /* now a valid state */ 138*de1e4e89SAndroid Build Coastguard Worker }; 139*de1e4e89SAndroid Build Coastguard Worker 140*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_EOL 0 141*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_NOP 1 142*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_MAXSEG 2 143*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_MAXSEG 4 144*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_WINDOW 3 145*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_WINDOW 3 146*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_SACK_PERMITTED 4 /* Experimental */ 147*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_SACK_PERMITTED 2 148*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_SACK 5 /* Experimental */ 149*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_TIMESTAMP 8 150*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_TIMESTAMP 10 151*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ 152*de1e4e89SAndroid Build Coastguard Worker 153*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_TSTAMP_HDR \ 154*de1e4e89SAndroid Build Coastguard Worker (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) 155*de1e4e89SAndroid Build Coastguard Worker 156*de1e4e89SAndroid Build Coastguard Worker /* 157*de1e4e89SAndroid Build Coastguard Worker * Default maximum segment size for TCP. 158*de1e4e89SAndroid Build Coastguard Worker * With an IP MSS of 576, this is 536, 159*de1e4e89SAndroid Build Coastguard Worker * but 512 is probably more convenient. 160*de1e4e89SAndroid Build Coastguard Worker * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). 161*de1e4e89SAndroid Build Coastguard Worker */ 162*de1e4e89SAndroid Build Coastguard Worker # define TCP_MSS 512 163*de1e4e89SAndroid Build Coastguard Worker 164*de1e4e89SAndroid Build Coastguard Worker # define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ 165*de1e4e89SAndroid Build Coastguard Worker 166*de1e4e89SAndroid Build Coastguard Worker # define TCP_MAX_WINSHIFT 14 /* maximum window shift */ 167*de1e4e89SAndroid Build Coastguard Worker 168*de1e4e89SAndroid Build Coastguard Worker # define SOL_TCP 6 /* TCP level */ 169*de1e4e89SAndroid Build Coastguard Worker 170*de1e4e89SAndroid Build Coastguard Worker 171*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_TIMESTAMPS 1 172*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_SACK 2 173*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_WSCALE 4 174*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_ECN 8 175*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_ECN_SEEN 16 176*de1e4e89SAndroid Build Coastguard Worker 177*de1e4e89SAndroid Build Coastguard Worker /* Values for tcpi_state. */ 178*de1e4e89SAndroid Build Coastguard Worker enum tcp_ca_state 179*de1e4e89SAndroid Build Coastguard Worker { 180*de1e4e89SAndroid Build Coastguard Worker TCP_CA_Open = 0, 181*de1e4e89SAndroid Build Coastguard Worker TCP_CA_Disorder = 1, 182*de1e4e89SAndroid Build Coastguard Worker TCP_CA_CWR = 2, 183*de1e4e89SAndroid Build Coastguard Worker TCP_CA_Recovery = 3, 184*de1e4e89SAndroid Build Coastguard Worker TCP_CA_Loss = 4 185*de1e4e89SAndroid Build Coastguard Worker }; 186*de1e4e89SAndroid Build Coastguard Worker 187*de1e4e89SAndroid Build Coastguard Worker struct tcp_info 188*de1e4e89SAndroid Build Coastguard Worker { 189*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_state; 190*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_ca_state; 191*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_retransmits; 192*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_probes; 193*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_backoff; 194*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_options; 195*de1e4e89SAndroid Build Coastguard Worker u_int8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; 196*de1e4e89SAndroid Build Coastguard Worker 197*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rto; 198*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_ato; 199*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_snd_mss; 200*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rcv_mss; 201*de1e4e89SAndroid Build Coastguard Worker 202*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_unacked; 203*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_sacked; 204*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_lost; 205*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_retrans; 206*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_fackets; 207*de1e4e89SAndroid Build Coastguard Worker 208*de1e4e89SAndroid Build Coastguard Worker /* Times. */ 209*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_last_data_sent; 210*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_last_ack_sent; /* Not remembered, sorry. */ 211*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_last_data_recv; 212*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_last_ack_recv; 213*de1e4e89SAndroid Build Coastguard Worker 214*de1e4e89SAndroid Build Coastguard Worker /* Metrics. */ 215*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_pmtu; 216*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rcv_ssthresh; 217*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rtt; 218*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rttvar; 219*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_snd_ssthresh; 220*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_snd_cwnd; 221*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_advmss; 222*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_reordering; 223*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rcv_rtt; 224*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_rcv_space; 225*de1e4e89SAndroid Build Coastguard Worker u_int32_t tcpi_total_retrans; 226*de1e4e89SAndroid Build Coastguard Worker 227*de1e4e89SAndroid Build Coastguard Worker }; 228*de1e4e89SAndroid Build Coastguard Worker 229*de1e4e89SAndroid Build Coastguard Worker #endif /* Misc. */ 230*de1e4e89SAndroid Build Coastguard Worker 231*de1e4e89SAndroid Build Coastguard Worker #endif /* netinet/tcp.h */ 232