19cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* 29cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * INET An implementation of the TCP/IP protocol suite for the LINUX 39cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * operating system. INET is implemented using the BSD Socket 49cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * interface as the means of communication with the user level. 59cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * 69cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * Definitions for the TCP protocol. 79cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * 89cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * Version: @(#)tcp.h 1.0.2 04/28/93 99cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * 109cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 119cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * 129cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * This program is free software; you can redistribute it and/or 139cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * modify it under the terms of the GNU General Public License 149cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * as published by the Free Software Foundation; either version 159cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * 2 of the License, or (at your option) any later version. 169cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet */ 179cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#ifndef _LINUX_TCP_H 189cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define _LINUX_TCP_H 199cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 209cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#include <linux/types.h> 219cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#include <asm/byteorder.h> 229cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#include <linux/socket.h> 239cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 249cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetstruct tcphdr { 259cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be16 source; 269cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be16 dest; 279cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be32 seq; 289cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be32 ack_seq; 299cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#if defined(__LITTLE_ENDIAN_BITFIELD) 309cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u16 res1:4, 319cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet doff:4, 329cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet fin:1, 339cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet syn:1, 349cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet rst:1, 359cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet psh:1, 369cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet ack:1, 379cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet urg:1, 389cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet ece:1, 399cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet cwr:1; 409cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#elif defined(__BIG_ENDIAN_BITFIELD) 419cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u16 doff:4, 429cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet res1:4, 439cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet cwr:1, 449cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet ece:1, 459cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet urg:1, 469cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet ack:1, 479cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet psh:1, 489cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet rst:1, 499cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet syn:1, 509cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet fin:1; 519cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#else 529cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#error "Adjust your <asm/byteorder.h> defines" 539cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#endif 549cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be16 window; 559cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __sum16 check; 569cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be16 urg_ptr; 579cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 589cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 599cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* 609cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * The union cast uses a gcc extension to avoid aliasing problems 619cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * (union is compatible to any of its members) 629cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * This means this part of the code is -fstrict-aliasing safe now. 639cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet */ 649cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetunion tcp_word_hdr { 659cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet struct tcphdr hdr; 669cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __be32 words[5]; 679cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 689cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 699cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 709cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 719cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetenum { 729cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000), 739cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000), 749cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000), 759cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000), 769cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000), 779cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000), 789cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000), 799cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000), 809cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000), 819cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000) 829cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 839cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 849cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* 859cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet * TCP general constants 869cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet */ 879cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_MSS_DEFAULT 536U /* IPv4 (RFC1122, RFC2581) */ 889cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_MSS_DESIRED 1220U /* IPv6 (tunneled), EDNS0 (RFC3226) */ 899cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 909cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* TCP socket options */ 919cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */ 929cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_MAXSEG 2 /* Limit MSS */ 939cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_CORK 3 /* Never send partially complete segments */ 949cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_KEEPIDLE 4 /* Start keeplives after this period */ 959cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_KEEPINTVL 5 /* Interval between keepalives */ 969cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_KEEPCNT 6 /* Number of keepalives before death */ 979cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_SYNCNT 7 /* Number of SYN retransmits */ 989cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ 999cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ 1009cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ 1019cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_INFO 11 /* Information about this connection. */ 1029cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_QUICKACK 12 /* Block/reenable quick acks */ 1039cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_CONGESTION 13 /* Congestion control algorithm */ 1049cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ 1059cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/ 1069cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_THIN_DUPACK 17 /* Fast retrans. after 1 dupack */ 1079cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_USER_TIMEOUT 18 /* How long for loss retry before timeout */ 1089cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_REPAIR 19 /* TCP sock is under repair right now */ 1099cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_REPAIR_QUEUE 20 1109cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_QUEUE_SEQ 21 1119cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_REPAIR_OPTIONS 22 1129cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_FASTOPEN 23 /* Enable FastOpen on listeners */ 1139cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_TIMESTAMP 24 1146b2ed935ae4e6a0bafa5a314cc177470529cd629Stephen Hemminger#define TCP_NOTSENT_LOWAT 25 /* limit number of unsent bytes in write queue */ 115270763546a209688a3a74453d908017b71c58664Stephen Hemminger#define TCP_CC_INFO 26 /* Get Congestion Control (optional) info */ 1168f42ceaf249189abe1891e622455813e7439b1b7Stephen Hemminger#define TCP_SAVE_SYN 27 /* Record SYN headers for new connections */ 1178f42ceaf249189abe1891e622455813e7439b1b7Stephen Hemminger#define TCP_SAVED_SYN 28 /* Get SYN headers recorded for connection */ 1189cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1199cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetstruct tcp_repair_opt { 1209cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 opt_code; 1219cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 opt_val; 1229cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 1239cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1249cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetenum { 1259cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_NO_QUEUE, 1269cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_RECV_QUEUE, 1279cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_SEND_QUEUE, 1289cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_QUEUES_NR, 1299cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 1309cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1319cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* for TCP_INFO socket option */ 1329cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_TIMESTAMPS 1 1339cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_SACK 2 1349cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_WSCALE 4 1359cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ 1369cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ 1379cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ 1389cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1399cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetenum tcp_ca_state { 1409cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_CA_Open = 0, 1419cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPF_CA_Open (1<<TCP_CA_Open) 1429cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_CA_Disorder = 1, 1439cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPF_CA_Disorder (1<<TCP_CA_Disorder) 1449cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_CA_CWR = 2, 1459cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPF_CA_CWR (1<<TCP_CA_CWR) 1469cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_CA_Recovery = 3, 1479cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPF_CA_Recovery (1<<TCP_CA_Recovery) 1489cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet TCP_CA_Loss = 4 1499cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCPF_CA_Loss (1<<TCP_CA_Loss) 1509cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 1519cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1529cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetstruct tcp_info { 1539cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_state; 1549cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_ca_state; 1559cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_retransmits; 1569cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_probes; 1579cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_backoff; 1589cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_options; 1599cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; 1609cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1619cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rto; 1629cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_ato; 1639cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_snd_mss; 1649cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rcv_mss; 1659cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1669cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_unacked; 1679cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_sacked; 1689cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_lost; 1699cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_retrans; 1709cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_fackets; 1719cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1729cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet /* Times. */ 1739cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_last_data_sent; 1749cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_last_ack_sent; /* Not remembered, sorry. */ 1759cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_last_data_recv; 1769cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_last_ack_recv; 1779cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1789cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet /* Metrics. */ 1799cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_pmtu; 1809cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rcv_ssthresh; 1819cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rtt; 1829cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rttvar; 1839cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_snd_ssthresh; 1849cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_snd_cwnd; 1859cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_advmss; 1869cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_reordering; 1879cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1889cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rcv_rtt; 1899cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_rcv_space; 1909cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 1919cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 tcpi_total_retrans; 192bf9f122de3151f212db3bbe379ce72cd9363b184Stephen Hemminger 193bf9f122de3151f212db3bbe379ce72cd9363b184Stephen Hemminger __u64 tcpi_pacing_rate; 194bf9f122de3151f212db3bbe379ce72cd9363b184Stephen Hemminger __u64 tcpi_max_pacing_rate; 19503371c7d98d167145b0c562f5d2ca2f54c8a5c7fStephen Hemminger __u64 tcpi_bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked */ 196270763546a209688a3a74453d908017b71c58664Stephen Hemminger __u64 tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */ 19703371c7d98d167145b0c562f5d2ca2f54c8a5c7fStephen Hemminger __u32 tcpi_segs_out; /* RFC4898 tcpEStatsPerfSegsOut */ 19803371c7d98d167145b0c562f5d2ca2f54c8a5c7fStephen Hemminger __u32 tcpi_segs_in; /* RFC4898 tcpEStatsPerfSegsIn */ 1999cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 2009cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 2019cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet/* for TCP_MD5SIG socket option */ 2029cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#define TCP_MD5SIG_MAXKEYLEN 80 2039cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 2049cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazetstruct tcp_md5sig { 2059cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet struct __kernel_sockaddr_storage tcpm_addr; /* address associated */ 2069cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u16 __tcpm_pad1; /* zero */ 2079cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u16 tcpm_keylen; /* key length */ 2089cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u32 __tcpm_pad2; /* zero */ 2099cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */ 2109cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet}; 2119cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet 2129cb1eccf6910209673a7e9fc135708420db683d4Eric Dumazet#endif /* _LINUX_TCP_H */ 213