1*cda5da8dSAndroid Build Coastguard Worker #ifndef _NETINET_TCP_H 2*cda5da8dSAndroid Build Coastguard Worker #define _NETINET_TCP_H 3*cda5da8dSAndroid Build Coastguard Worker 4*cda5da8dSAndroid Build Coastguard Worker #include <features.h> 5*cda5da8dSAndroid Build Coastguard Worker 6*cda5da8dSAndroid Build Coastguard Worker #define TCP_NODELAY 1 7*cda5da8dSAndroid Build Coastguard Worker #define TCP_MAXSEG 2 8*cda5da8dSAndroid Build Coastguard Worker #define TCP_CORK 3 9*cda5da8dSAndroid Build Coastguard Worker #define TCP_KEEPIDLE 4 10*cda5da8dSAndroid Build Coastguard Worker #define TCP_KEEPINTVL 5 11*cda5da8dSAndroid Build Coastguard Worker #define TCP_KEEPCNT 6 12*cda5da8dSAndroid Build Coastguard Worker #define TCP_SYNCNT 7 13*cda5da8dSAndroid Build Coastguard Worker #define TCP_LINGER2 8 14*cda5da8dSAndroid Build Coastguard Worker #define TCP_DEFER_ACCEPT 9 15*cda5da8dSAndroid Build Coastguard Worker #define TCP_WINDOW_CLAMP 10 16*cda5da8dSAndroid Build Coastguard Worker #define TCP_INFO 11 17*cda5da8dSAndroid Build Coastguard Worker #define TCP_QUICKACK 12 18*cda5da8dSAndroid Build Coastguard Worker #define TCP_CONGESTION 13 19*cda5da8dSAndroid Build Coastguard Worker #define TCP_MD5SIG 14 20*cda5da8dSAndroid Build Coastguard Worker #define TCP_THIN_LINEAR_TIMEOUTS 16 21*cda5da8dSAndroid Build Coastguard Worker #define TCP_THIN_DUPACK 17 22*cda5da8dSAndroid Build Coastguard Worker #define TCP_USER_TIMEOUT 18 23*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR 19 24*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_QUEUE 20 25*cda5da8dSAndroid Build Coastguard Worker #define TCP_QUEUE_SEQ 21 26*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_OPTIONS 22 27*cda5da8dSAndroid Build Coastguard Worker #define TCP_FASTOPEN 23 28*cda5da8dSAndroid Build Coastguard Worker #define TCP_TIMESTAMP 24 29*cda5da8dSAndroid Build Coastguard Worker #define TCP_NOTSENT_LOWAT 25 30*cda5da8dSAndroid Build Coastguard Worker #define TCP_CC_INFO 26 31*cda5da8dSAndroid Build Coastguard Worker #define TCP_SAVE_SYN 27 32*cda5da8dSAndroid Build Coastguard Worker #define TCP_SAVED_SYN 28 33*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_WINDOW 29 34*cda5da8dSAndroid Build Coastguard Worker #define TCP_FASTOPEN_CONNECT 30 35*cda5da8dSAndroid Build Coastguard Worker #define TCP_ULP 31 36*cda5da8dSAndroid Build Coastguard Worker #define TCP_MD5SIG_EXT 32 37*cda5da8dSAndroid Build Coastguard Worker #define TCP_FASTOPEN_KEY 33 38*cda5da8dSAndroid Build Coastguard Worker #define TCP_FASTOPEN_NO_COOKIE 34 39*cda5da8dSAndroid Build Coastguard Worker #define TCP_ZEROCOPY_RECEIVE 35 40*cda5da8dSAndroid Build Coastguard Worker #define TCP_INQ 36 41*cda5da8dSAndroid Build Coastguard Worker #define TCP_TX_DELAY 37 42*cda5da8dSAndroid Build Coastguard Worker 43*cda5da8dSAndroid Build Coastguard Worker #define TCP_CM_INQ TCP_INQ 44*cda5da8dSAndroid Build Coastguard Worker 45*cda5da8dSAndroid Build Coastguard Worker #define TCP_ESTABLISHED 1 46*cda5da8dSAndroid Build Coastguard Worker #define TCP_SYN_SENT 2 47*cda5da8dSAndroid Build Coastguard Worker #define TCP_SYN_RECV 3 48*cda5da8dSAndroid Build Coastguard Worker #define TCP_FIN_WAIT1 4 49*cda5da8dSAndroid Build Coastguard Worker #define TCP_FIN_WAIT2 5 50*cda5da8dSAndroid Build Coastguard Worker #define TCP_TIME_WAIT 6 51*cda5da8dSAndroid Build Coastguard Worker #define TCP_CLOSE 7 52*cda5da8dSAndroid Build Coastguard Worker #define TCP_CLOSE_WAIT 8 53*cda5da8dSAndroid Build Coastguard Worker #define TCP_LAST_ACK 9 54*cda5da8dSAndroid Build Coastguard Worker #define TCP_LISTEN 10 55*cda5da8dSAndroid Build Coastguard Worker #define TCP_CLOSING 11 56*cda5da8dSAndroid Build Coastguard Worker 57*cda5da8dSAndroid Build Coastguard Worker enum { 58*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_PAD, 59*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_BUSY, 60*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_RWND_LIMITED, 61*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_SNDBUF_LIMITED, 62*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DATA_SEGS_OUT, 63*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_TOTAL_RETRANS, 64*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_PACING_RATE, 65*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DELIVERY_RATE, 66*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_SND_CWND, 67*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_REORDERING, 68*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_MIN_RTT, 69*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_RECUR_RETRANS, 70*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DELIVERY_RATE_APP_LMT, 71*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_SNDQ_SIZE, 72*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_CA_STATE, 73*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_SND_SSTHRESH, 74*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DELIVERED, 75*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DELIVERED_CE, 76*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_BYTES_SENT, 77*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_BYTES_RETRANS, 78*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_DSACK_DUPS, 79*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_REORD_SEEN, 80*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_SRTT, 81*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_TIMEOUT_REHASH, 82*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_BYTES_NOTSENT, 83*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_EDT, 84*cda5da8dSAndroid Build Coastguard Worker TCP_NLA_TTL, 85*cda5da8dSAndroid Build Coastguard Worker }; 86*cda5da8dSAndroid Build Coastguard Worker 87*cda5da8dSAndroid Build Coastguard Worker #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 88*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_EOL 0 89*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_NOP 1 90*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_MAXSEG 2 91*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_WINDOW 3 92*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_SACK_PERMITTED 4 93*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_SACK 5 94*cda5da8dSAndroid Build Coastguard Worker #define TCPOPT_TIMESTAMP 8 95*cda5da8dSAndroid Build Coastguard Worker #define TCPOLEN_SACK_PERMITTED 2 96*cda5da8dSAndroid Build Coastguard Worker #define TCPOLEN_WINDOW 3 97*cda5da8dSAndroid Build Coastguard Worker #define TCPOLEN_MAXSEG 4 98*cda5da8dSAndroid Build Coastguard Worker #define TCPOLEN_TIMESTAMP 10 99*cda5da8dSAndroid Build Coastguard Worker 100*cda5da8dSAndroid Build Coastguard Worker #define SOL_TCP 6 101*cda5da8dSAndroid Build Coastguard Worker 102*cda5da8dSAndroid Build Coastguard Worker #include <sys/types.h> 103*cda5da8dSAndroid Build Coastguard Worker #include <sys/socket.h> 104*cda5da8dSAndroid Build Coastguard Worker #include <stdint.h> 105*cda5da8dSAndroid Build Coastguard Worker 106*cda5da8dSAndroid Build Coastguard Worker typedef uint32_t tcp_seq; 107*cda5da8dSAndroid Build Coastguard Worker 108*cda5da8dSAndroid Build Coastguard Worker #define TH_FIN 0x01 109*cda5da8dSAndroid Build Coastguard Worker #define TH_SYN 0x02 110*cda5da8dSAndroid Build Coastguard Worker #define TH_RST 0x04 111*cda5da8dSAndroid Build Coastguard Worker #define TH_PUSH 0x08 112*cda5da8dSAndroid Build Coastguard Worker #define TH_ACK 0x10 113*cda5da8dSAndroid Build Coastguard Worker #define TH_URG 0x20 114*cda5da8dSAndroid Build Coastguard Worker 115*cda5da8dSAndroid Build Coastguard Worker #include <bits/tcphdr.h> 116*cda5da8dSAndroid Build Coastguard Worker #endif 117*cda5da8dSAndroid Build Coastguard Worker 118*cda5da8dSAndroid Build Coastguard Worker #ifdef _GNU_SOURCE 119*cda5da8dSAndroid Build Coastguard Worker #define TCPI_OPT_TIMESTAMPS 1 120*cda5da8dSAndroid Build Coastguard Worker #define TCPI_OPT_SACK 2 121*cda5da8dSAndroid Build Coastguard Worker #define TCPI_OPT_WSCALE 4 122*cda5da8dSAndroid Build Coastguard Worker #define TCPI_OPT_ECN 8 123*cda5da8dSAndroid Build Coastguard Worker 124*cda5da8dSAndroid Build Coastguard Worker #define TCP_CA_Open 0 125*cda5da8dSAndroid Build Coastguard Worker #define TCP_CA_Disorder 1 126*cda5da8dSAndroid Build Coastguard Worker #define TCP_CA_CWR 2 127*cda5da8dSAndroid Build Coastguard Worker #define TCP_CA_Recovery 3 128*cda5da8dSAndroid Build Coastguard Worker #define TCP_CA_Loss 4 129*cda5da8dSAndroid Build Coastguard Worker 130*cda5da8dSAndroid Build Coastguard Worker enum tcp_fastopen_client_fail { 131*cda5da8dSAndroid Build Coastguard Worker TFO_STATUS_UNSPEC, 132*cda5da8dSAndroid Build Coastguard Worker TFO_COOKIE_UNAVAILABLE, 133*cda5da8dSAndroid Build Coastguard Worker TFO_DATA_NOT_ACKED, 134*cda5da8dSAndroid Build Coastguard Worker TFO_SYN_RETRANSMITTED, 135*cda5da8dSAndroid Build Coastguard Worker }; 136*cda5da8dSAndroid Build Coastguard Worker 137*cda5da8dSAndroid Build Coastguard Worker struct tcp_info { 138*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_state; 139*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_ca_state; 140*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_retransmits; 141*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_probes; 142*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_backoff; 143*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_options; 144*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; 145*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpi_delivery_rate_app_limited : 1, tcpi_fastopen_client_fail : 2; 146*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rto; 147*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_ato; 148*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_snd_mss; 149*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rcv_mss; 150*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_unacked; 151*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_sacked; 152*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_lost; 153*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_retrans; 154*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_fackets; 155*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_last_data_sent; 156*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_last_ack_sent; 157*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_last_data_recv; 158*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_last_ack_recv; 159*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_pmtu; 160*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rcv_ssthresh; 161*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rtt; 162*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rttvar; 163*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_snd_ssthresh; 164*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_snd_cwnd; 165*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_advmss; 166*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_reordering; 167*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rcv_rtt; 168*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rcv_space; 169*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_total_retrans; 170*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_pacing_rate; 171*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_max_pacing_rate; 172*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_bytes_acked; 173*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_bytes_received; 174*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_segs_out; 175*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_segs_in; 176*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_notsent_bytes; 177*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_min_rtt; 178*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_data_segs_in; 179*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_data_segs_out; 180*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_delivery_rate; 181*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_busy_time; 182*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_rwnd_limited; 183*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_sndbuf_limited; 184*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_delivered; 185*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_delivered_ce; 186*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_bytes_sent; 187*cda5da8dSAndroid Build Coastguard Worker uint64_t tcpi_bytes_retrans; 188*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_dsack_dups; 189*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_reord_seen; 190*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_rcv_ooopack; 191*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpi_snd_wnd; 192*cda5da8dSAndroid Build Coastguard Worker }; 193*cda5da8dSAndroid Build Coastguard Worker 194*cda5da8dSAndroid Build Coastguard Worker #define TCP_MD5SIG_MAXKEYLEN 80 195*cda5da8dSAndroid Build Coastguard Worker 196*cda5da8dSAndroid Build Coastguard Worker #define TCP_MD5SIG_FLAG_PREFIX 0x1 197*cda5da8dSAndroid Build Coastguard Worker #define TCP_MD5SIG_FLAG_IFINDEX 0x2 198*cda5da8dSAndroid Build Coastguard Worker 199*cda5da8dSAndroid Build Coastguard Worker struct tcp_md5sig { 200*cda5da8dSAndroid Build Coastguard Worker struct sockaddr_storage tcpm_addr; 201*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_flags; 202*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_prefixlen; 203*cda5da8dSAndroid Build Coastguard Worker uint16_t tcpm_keylen; 204*cda5da8dSAndroid Build Coastguard Worker int tcpm_ifindex; 205*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; 206*cda5da8dSAndroid Build Coastguard Worker }; 207*cda5da8dSAndroid Build Coastguard Worker 208*cda5da8dSAndroid Build Coastguard Worker struct tcp_diag_md5sig { 209*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_family; 210*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_prefixlen; 211*cda5da8dSAndroid Build Coastguard Worker uint16_t tcpm_keylen; 212*cda5da8dSAndroid Build Coastguard Worker uint32_t tcpm_addr[4]; 213*cda5da8dSAndroid Build Coastguard Worker uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; 214*cda5da8dSAndroid Build Coastguard Worker }; 215*cda5da8dSAndroid Build Coastguard Worker 216*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_ON 1 217*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_OFF 0 218*cda5da8dSAndroid Build Coastguard Worker #define TCP_REPAIR_OFF_NO_WP -1 219*cda5da8dSAndroid Build Coastguard Worker 220*cda5da8dSAndroid Build Coastguard Worker struct tcp_repair_window { 221*cda5da8dSAndroid Build Coastguard Worker uint32_t snd_wl1; 222*cda5da8dSAndroid Build Coastguard Worker uint32_t snd_wnd; 223*cda5da8dSAndroid Build Coastguard Worker uint32_t max_window; 224*cda5da8dSAndroid Build Coastguard Worker uint32_t rcv_wnd; 225*cda5da8dSAndroid Build Coastguard Worker uint32_t rcv_wup; 226*cda5da8dSAndroid Build Coastguard Worker }; 227*cda5da8dSAndroid Build Coastguard Worker 228*cda5da8dSAndroid Build Coastguard Worker #define TCP_RECEIVE_ZEROCOPY_FLAG_TLB_CLEAN_HINT 0x1 229*cda5da8dSAndroid Build Coastguard Worker 230*cda5da8dSAndroid Build Coastguard Worker struct tcp_zerocopy_receive { 231*cda5da8dSAndroid Build Coastguard Worker uint64_t address; 232*cda5da8dSAndroid Build Coastguard Worker uint32_t length; 233*cda5da8dSAndroid Build Coastguard Worker uint32_t recv_skip_hint; 234*cda5da8dSAndroid Build Coastguard Worker uint32_t inq; 235*cda5da8dSAndroid Build Coastguard Worker int32_t err; 236*cda5da8dSAndroid Build Coastguard Worker uint64_t copybuf_address; 237*cda5da8dSAndroid Build Coastguard Worker int32_t copybuf_len; 238*cda5da8dSAndroid Build Coastguard Worker uint32_t flags; 239*cda5da8dSAndroid Build Coastguard Worker uint64_t msg_control; 240*cda5da8dSAndroid Build Coastguard Worker uint64_t msg_controllen; 241*cda5da8dSAndroid Build Coastguard Worker uint32_t msg_flags; 242*cda5da8dSAndroid Build Coastguard Worker uint32_t reserved; 243*cda5da8dSAndroid Build Coastguard Worker }; 244*cda5da8dSAndroid Build Coastguard Worker 245*cda5da8dSAndroid Build Coastguard Worker #endif 246*cda5da8dSAndroid Build Coastguard Worker 247*cda5da8dSAndroid Build Coastguard Worker #endif 248