1#ifndef _NETINET_TCP_H 2#define _NETINET_TCP_H 3 4#include <features.h> 5 6#define TCP_NODELAY 1 7#define TCP_MAXSEG 2 8#define TCP_CORK 3 9#define TCP_KEEPIDLE 4 10#define TCP_KEEPINTVL 5 11#define TCP_KEEPCNT 6 12#define TCP_SYNCNT 7 13#define TCP_LINGER2 8 14#define TCP_DEFER_ACCEPT 9 15#define TCP_WINDOW_CLAMP 10 16#define TCP_INFO 11 17#define TCP_QUICKACK 12 18#define TCP_CONGESTION 13 19#define TCP_MD5SIG 14 20#define TCP_THIN_LINEAR_TIMEOUTS 16 21#define TCP_THIN_DUPACK 17 22#define TCP_USER_TIMEOUT 18 23#define TCP_REPAIR 19 24#define TCP_REPAIR_QUEUE 20 25#define TCP_QUEUE_SEQ 21 26#define TCP_REPAIR_OPTIONS 22 27#define TCP_FASTOPEN 23 28#define TCP_TIMESTAMP 24 29#define TCP_NOTSENT_LOWAT 25 30#define TCP_CC_INFO 26 31#define TCP_SAVE_SYN 27 32#define TCP_SAVED_SYN 28 33#define TCP_REPAIR_WINDOW 29 34 35#define TCP_ESTABLISHED 1 36#define TCP_SYN_SENT 2 37#define TCP_SYN_RECV 3 38#define TCP_FIN_WAIT1 4 39#define TCP_FIN_WAIT2 5 40#define TCP_TIME_WAIT 6 41#define TCP_CLOSE 7 42#define TCP_CLOSE_WAIT 8 43#define TCP_LAST_ACK 9 44#define TCP_LISTEN 10 45#define TCP_CLOSING 11 46 47#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 48#define TCPOPT_EOL 0 49#define TCPOPT_NOP 1 50#define TCPOPT_MAXSEG 2 51#define TCPOPT_WINDOW 3 52#define TCPOPT_SACK_PERMITTED 4 53#define TCPOPT_SACK 5 54#define TCPOPT_TIMESTAMP 8 55#define TCPOLEN_SACK_PERMITTED 2 56#define TCPOLEN_WINDOW 3 57#define TCPOLEN_MAXSEG 4 58#define TCPOLEN_TIMESTAMP 10 59 60#define SOL_TCP 6 61 62#include <sys/types.h> 63#include <sys/socket.h> 64#include <stdint.h> 65#include <endian.h> 66 67typedef uint32_t tcp_seq; 68 69#define TH_FIN 0x01 70#define TH_SYN 0x02 71#define TH_RST 0x04 72#define TH_PUSH 0x08 73#define TH_ACK 0x10 74#define TH_URG 0x20 75 76struct tcphdr { 77#ifdef _GNU_SOURCE 78#ifdef __GNUC__ 79 __extension__ 80#endif 81 union { struct { 82 83 uint16_t source; 84 uint16_t dest; 85 uint32_t seq; 86 uint32_t ack_seq; 87#if __BYTE_ORDER == __LITTLE_ENDIAN 88 uint16_t res1:4; 89 uint16_t doff:4; 90 uint16_t fin:1; 91 uint16_t syn:1; 92 uint16_t rst:1; 93 uint16_t psh:1; 94 uint16_t ack:1; 95 uint16_t urg:1; 96 uint16_t res2:2; 97#else 98 uint16_t doff:4; 99 uint16_t res1:4; 100 uint16_t res2:2; 101 uint16_t urg:1; 102 uint16_t ack:1; 103 uint16_t psh:1; 104 uint16_t rst:1; 105 uint16_t syn:1; 106 uint16_t fin:1; 107#endif 108 uint16_t window; 109 uint16_t check; 110 uint16_t urg_ptr; 111 112 }; struct { 113#endif 114 115 uint16_t th_sport; 116 uint16_t th_dport; 117 uint32_t th_seq; 118 uint32_t th_ack; 119#if __BYTE_ORDER == __LITTLE_ENDIAN 120 uint8_t th_x2:4; 121 uint8_t th_off:4; 122#else 123 uint8_t th_off:4; 124 uint8_t th_x2:4; 125#endif 126 uint8_t th_flags; 127 uint16_t th_win; 128 uint16_t th_sum; 129 uint16_t th_urp; 130 131#ifdef _GNU_SOURCE 132 }; }; 133#endif 134}; 135#endif 136 137#ifdef _GNU_SOURCE 138#define TCPI_OPT_TIMESTAMPS 1 139#define TCPI_OPT_SACK 2 140#define TCPI_OPT_WSCALE 4 141#define TCPI_OPT_ECN 8 142 143#define TCP_CA_Open 0 144#define TCP_CA_Disorder 1 145#define TCP_CA_CWR 2 146#define TCP_CA_Recovery 3 147#define TCP_CA_Loss 4 148 149struct tcp_info { 150 uint8_t tcpi_state; 151 uint8_t tcpi_ca_state; 152 uint8_t tcpi_retransmits; 153 uint8_t tcpi_probes; 154 uint8_t tcpi_backoff; 155 uint8_t tcpi_options; 156 uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; 157 uint8_t tcpi_delivery_rate_app_limited : 1; 158 uint32_t tcpi_rto; 159 uint32_t tcpi_ato; 160 uint32_t tcpi_snd_mss; 161 uint32_t tcpi_rcv_mss; 162 uint32_t tcpi_unacked; 163 uint32_t tcpi_sacked; 164 uint32_t tcpi_lost; 165 uint32_t tcpi_retrans; 166 uint32_t tcpi_fackets; 167 uint32_t tcpi_last_data_sent; 168 uint32_t tcpi_last_ack_sent; 169 uint32_t tcpi_last_data_recv; 170 uint32_t tcpi_last_ack_recv; 171 uint32_t tcpi_pmtu; 172 uint32_t tcpi_rcv_ssthresh; 173 uint32_t tcpi_rtt; 174 uint32_t tcpi_rttvar; 175 uint32_t tcpi_snd_ssthresh; 176 uint32_t tcpi_snd_cwnd; 177 uint32_t tcpi_advmss; 178 uint32_t tcpi_reordering; 179 uint32_t tcpi_rcv_rtt; 180 uint32_t tcpi_rcv_space; 181 uint32_t tcpi_total_retrans; 182 uint64_t tcpi_pacing_rate; 183 uint64_t tcpi_max_pacing_rate; 184 uint64_t tcpi_bytes_acked; 185 uint64_t tcpi_bytes_received; 186 uint32_t tcpi_segs_out; 187 uint32_t tcpi_segs_in; 188 uint32_t tcpi_notsent_bytes; 189 uint32_t tcpi_min_rtt; 190 uint32_t tcpi_data_segs_in; 191 uint32_t tcpi_data_segs_out; 192 uint64_t tcpi_delivery_rate; 193}; 194 195#define TCP_MD5SIG_MAXKEYLEN 80 196 197struct tcp_md5sig { 198 struct sockaddr_storage tcpm_addr; 199 uint16_t __tcpm_pad1; 200 uint16_t tcpm_keylen; 201 uint32_t __tcpm_pad2; 202 uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; 203}; 204 205struct tcp_repair_window { 206 uint32_t snd_wl1; 207 uint32_t snd_wnd; 208 uint32_t max_window; 209 uint32_t rcv_wnd; 210 uint32_t rcv_wup; 211}; 212 213#endif 214 215#endif 216