1*14b24e2bSVaishali Kulkarni /* 2*14b24e2bSVaishali Kulkarni * CDDL HEADER START 3*14b24e2bSVaishali Kulkarni * 4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the 5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1, (the "License"). 6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 7*14b24e2bSVaishali Kulkarni * 8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0. 10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions 11*14b24e2bSVaishali Kulkarni * and limitations under the License. 12*14b24e2bSVaishali Kulkarni * 13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each 14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the 16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying 17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner] 18*14b24e2bSVaishali Kulkarni * 19*14b24e2bSVaishali Kulkarni * CDDL HEADER END 20*14b24e2bSVaishali Kulkarni */ 21*14b24e2bSVaishali Kulkarni 22*14b24e2bSVaishali Kulkarni /* 23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc. 24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development 25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1, (the "License"). 26*14b24e2bSVaishali Kulkarni 27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 28*14b24e2bSVaishali Kulkarni 29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available 30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0 31*14b24e2bSVaishali Kulkarni 32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and 33*14b24e2bSVaishali Kulkarni * limitations under the License. 34*14b24e2bSVaishali Kulkarni */ 35*14b24e2bSVaishali Kulkarni 36*14b24e2bSVaishali Kulkarni #ifndef __TCP_COMMON__ 37*14b24e2bSVaishali Kulkarni #define __TCP_COMMON__ 38*14b24e2bSVaishali Kulkarni /********************/ 39*14b24e2bSVaishali Kulkarni /* TCP FW CONSTANTS */ 40*14b24e2bSVaishali Kulkarni /********************/ 41*14b24e2bSVaishali Kulkarni 42*14b24e2bSVaishali Kulkarni #define TCP_INVALID_TIMEOUT_VAL -1 43*14b24e2bSVaishali Kulkarni 44*14b24e2bSVaishali Kulkarni 45*14b24e2bSVaishali Kulkarni /* 46*14b24e2bSVaishali Kulkarni * OOO opaque data received from LL2 47*14b24e2bSVaishali Kulkarni */ 48*14b24e2bSVaishali Kulkarni struct ooo_opaque 49*14b24e2bSVaishali Kulkarni { 50*14b24e2bSVaishali Kulkarni __le32 cid /* connection ID */; 51*14b24e2bSVaishali Kulkarni u8 drop_isle /* isle number of the first isle to drop */; 52*14b24e2bSVaishali Kulkarni u8 drop_size /* number of isles to drop */; 53*14b24e2bSVaishali Kulkarni u8 ooo_opcode /* (use enum tcp_seg_placement_event) */; 54*14b24e2bSVaishali Kulkarni u8 ooo_isle /* OOO isle number to add the packet to */; 55*14b24e2bSVaishali Kulkarni }; 56*14b24e2bSVaishali Kulkarni 57*14b24e2bSVaishali Kulkarni 58*14b24e2bSVaishali Kulkarni /* 59*14b24e2bSVaishali Kulkarni * tcp connect mode enum 60*14b24e2bSVaishali Kulkarni */ 61*14b24e2bSVaishali Kulkarni enum tcp_connect_mode 62*14b24e2bSVaishali Kulkarni { 63*14b24e2bSVaishali Kulkarni TCP_CONNECT_ACTIVE, 64*14b24e2bSVaishali Kulkarni TCP_CONNECT_PASSIVE, 65*14b24e2bSVaishali Kulkarni MAX_TCP_CONNECT_MODE 66*14b24e2bSVaishali Kulkarni }; 67*14b24e2bSVaishali Kulkarni 68*14b24e2bSVaishali Kulkarni 69*14b24e2bSVaishali Kulkarni /* 70*14b24e2bSVaishali Kulkarni * tcp function init parameters 71*14b24e2bSVaishali Kulkarni */ 72*14b24e2bSVaishali Kulkarni struct tcp_init_params 73*14b24e2bSVaishali Kulkarni { 74*14b24e2bSVaishali Kulkarni __le32 two_msl_timer /* 2MSL (used for TIME_WAIT state) timeout value */; 75*14b24e2bSVaishali Kulkarni __le16 tx_sws_timer /* Transmission silly window syndrom timeout value */; 76*14b24e2bSVaishali Kulkarni u8 max_fin_rt /* Minimum Fin RT */; 77*14b24e2bSVaishali Kulkarni u8 reserved[9]; 78*14b24e2bSVaishali Kulkarni }; 79*14b24e2bSVaishali Kulkarni 80*14b24e2bSVaishali Kulkarni 81*14b24e2bSVaishali Kulkarni /* 82*14b24e2bSVaishali Kulkarni * tcp IPv4/IPv6 enum 83*14b24e2bSVaishali Kulkarni */ 84*14b24e2bSVaishali Kulkarni enum tcp_ip_version 85*14b24e2bSVaishali Kulkarni { 86*14b24e2bSVaishali Kulkarni TCP_IPV4, 87*14b24e2bSVaishali Kulkarni TCP_IPV6, 88*14b24e2bSVaishali Kulkarni MAX_TCP_IP_VERSION 89*14b24e2bSVaishali Kulkarni }; 90*14b24e2bSVaishali Kulkarni 91*14b24e2bSVaishali Kulkarni 92*14b24e2bSVaishali Kulkarni /* 93*14b24e2bSVaishali Kulkarni * tcp offload parameters 94*14b24e2bSVaishali Kulkarni */ 95*14b24e2bSVaishali Kulkarni struct tcp_offload_params 96*14b24e2bSVaishali Kulkarni { 97*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_lo; 98*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_mid; 99*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_hi; 100*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_lo; 101*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_mid; 102*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_hi; 103*14b24e2bSVaishali Kulkarni __le16 vlan_id; 104*14b24e2bSVaishali Kulkarni u8 flags; 105*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_TS_EN_MASK 0x1 /* timestamp enable */ 106*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_TS_EN_SHIFT 0 107*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_DA_EN_MASK 0x1 /* delayed ack enabled */ 108*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_DA_EN_SHIFT 1 109*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_KA_EN_MASK 0x1 /* keep alive enabled */ 110*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_KA_EN_SHIFT 2 111*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_NAGLE_EN_MASK 0x1 /* nagle algorithm enabled */ 112*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_NAGLE_EN_SHIFT 3 113*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_MASK 0x1 /* delayed ack counter enabled */ 114*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_DA_CNT_EN_SHIFT 4 115*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_FIN_SENT_MASK 0x1 /* fin already sent to far end */ 116*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_FIN_SENT_SHIFT 5 117*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_MASK 0x1 /* fin received */ 118*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_FIN_RECEIVED_SHIFT 6 119*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_RESERVED0_MASK 0x1 120*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_RESERVED0_SHIFT 7 121*14b24e2bSVaishali Kulkarni u8 ip_version; 122*14b24e2bSVaishali Kulkarni __le32 remote_ip[4]; 123*14b24e2bSVaishali Kulkarni __le32 local_ip[4]; 124*14b24e2bSVaishali Kulkarni __le32 flow_label; 125*14b24e2bSVaishali Kulkarni u8 ttl; 126*14b24e2bSVaishali Kulkarni u8 tos_or_tc; 127*14b24e2bSVaishali Kulkarni __le16 remote_port; 128*14b24e2bSVaishali Kulkarni __le16 local_port; 129*14b24e2bSVaishali Kulkarni __le16 mss /* the mss derived from remote mss and local mtu, ipVersion options and tags */; 130*14b24e2bSVaishali Kulkarni u8 rcv_wnd_scale; 131*14b24e2bSVaishali Kulkarni u8 connect_mode /* TCP connect mode: use enum tcp_connect_mode */; 132*14b24e2bSVaishali Kulkarni __le16 srtt /* in ms */; 133*14b24e2bSVaishali Kulkarni __le32 cwnd /* absolute congestion window */; 134*14b24e2bSVaishali Kulkarni __le32 ss_thresh; 135*14b24e2bSVaishali Kulkarni __le16 reserved1; 136*14b24e2bSVaishali Kulkarni u8 ka_max_probe_cnt; 137*14b24e2bSVaishali Kulkarni u8 dup_ack_theshold; 138*14b24e2bSVaishali Kulkarni __le32 rcv_next; 139*14b24e2bSVaishali Kulkarni __le32 snd_una; 140*14b24e2bSVaishali Kulkarni __le32 snd_next; 141*14b24e2bSVaishali Kulkarni __le32 snd_max; 142*14b24e2bSVaishali Kulkarni __le32 snd_wnd /* absolute send window (not scaled) */; 143*14b24e2bSVaishali Kulkarni __le32 rcv_wnd /* absolute receive window (not scaled) */; 144*14b24e2bSVaishali Kulkarni __le32 snd_wl1 /* the segment sequence number used for the last window update */; 145*14b24e2bSVaishali Kulkarni __le32 ts_recent /* The timestamp value to send in the next ACK */; 146*14b24e2bSVaishali Kulkarni __le32 ts_recent_age /* The length of time, in ms, since the most recent timestamp was received */; 147*14b24e2bSVaishali Kulkarni __le32 total_rt /* The total time, in ms, that has been spent retransmitting the current TCP segment */; 148*14b24e2bSVaishali Kulkarni __le32 ka_timeout_delta /* The time remaining, in clock ticks, until the next keepalive timeout. A value of -1 indicates that the keepalive timer was not running when the connection was offloaded. */; 149*14b24e2bSVaishali Kulkarni __le32 rt_timeout_delta /* The time remaining, in clock ticks, until the next retransmit timeout. A value of -1 indicates that the retransmit timer was not running when the connection was offloaded. */; 150*14b24e2bSVaishali Kulkarni u8 dup_ack_cnt /* The number of ACKs that have been accepted for the same sequence number */; 151*14b24e2bSVaishali Kulkarni u8 snd_wnd_probe_cnt /* The current send window probe round */; 152*14b24e2bSVaishali Kulkarni u8 ka_probe_cnt /* the number of keepalive probes that have been sent that have not received a response */; 153*14b24e2bSVaishali Kulkarni u8 rt_cnt /* The number of retransmits that have been sent */; 154*14b24e2bSVaishali Kulkarni __le16 rtt_var /* in ms */; 155*14b24e2bSVaishali Kulkarni __le16 fw_internal /* fw internal use - initialize value = 0 */; 156*14b24e2bSVaishali Kulkarni __le32 ka_timeout /* This member specifies, in ms, the timeout interval for inactivity before sending a keepalive probe */; 157*14b24e2bSVaishali Kulkarni __le32 ka_interval /* This member specifies, in ms, the timeout after which to retransmit a keepalive frame if no response is received to a keepalive probe */; 158*14b24e2bSVaishali Kulkarni __le32 max_rt_time /* This member specifies, in ms, the maximum time that the offload target should spend retransmitting a segment */; 159*14b24e2bSVaishali Kulkarni __le32 initial_rcv_wnd /* Initial receive window */; 160*14b24e2bSVaishali Kulkarni u8 snd_wnd_scale; 161*14b24e2bSVaishali Kulkarni u8 ack_frequency /* delayed ack counter threshold */; 162*14b24e2bSVaishali Kulkarni __le16 da_timeout_value /* delayed ack timeout value in ms */; 163*14b24e2bSVaishali Kulkarni __le32 reserved3[2]; 164*14b24e2bSVaishali Kulkarni }; 165*14b24e2bSVaishali Kulkarni 166*14b24e2bSVaishali Kulkarni 167*14b24e2bSVaishali Kulkarni /* 168*14b24e2bSVaishali Kulkarni * tcp offload parameters 169*14b24e2bSVaishali Kulkarni */ 170*14b24e2bSVaishali Kulkarni struct tcp_offload_params_opt2 171*14b24e2bSVaishali Kulkarni { 172*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_lo; 173*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_mid; 174*14b24e2bSVaishali Kulkarni __le16 local_mac_addr_hi; 175*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_lo; 176*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_mid; 177*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_hi; 178*14b24e2bSVaishali Kulkarni __le16 vlan_id; 179*14b24e2bSVaishali Kulkarni u8 flags; 180*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_MASK 0x1 /* timestamp enable */ 181*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_TS_EN_SHIFT 0 182*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_MASK 0x1 /* delayed ack enabled */ 183*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_DA_EN_SHIFT 1 184*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_MASK 0x1 /* keep alive enabled */ 185*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_KA_EN_SHIFT 2 186*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_MASK 0x1F 187*14b24e2bSVaishali Kulkarni #define TCP_OFFLOAD_PARAMS_OPT2_RESERVED0_SHIFT 3 188*14b24e2bSVaishali Kulkarni u8 ip_version; 189*14b24e2bSVaishali Kulkarni __le32 remote_ip[4]; 190*14b24e2bSVaishali Kulkarni __le32 local_ip[4]; 191*14b24e2bSVaishali Kulkarni __le32 flow_label; 192*14b24e2bSVaishali Kulkarni u8 ttl; 193*14b24e2bSVaishali Kulkarni u8 tos_or_tc; 194*14b24e2bSVaishali Kulkarni __le16 remote_port; 195*14b24e2bSVaishali Kulkarni __le16 local_port; 196*14b24e2bSVaishali Kulkarni __le16 mss /* the mss derived from remote mss and local mtu, ipVersion options and tags */; 197*14b24e2bSVaishali Kulkarni u8 rcv_wnd_scale; 198*14b24e2bSVaishali Kulkarni u8 connect_mode /* TCP connect mode: use enum tcp_connect_mode */; 199*14b24e2bSVaishali Kulkarni __le16 syn_ip_payload_length /* length of Tcp header in SYN packet - relevent for passive mode */; 200*14b24e2bSVaishali Kulkarni __le32 syn_phy_addr_lo /* physical address (low) of SYN buffer - relevent for passive mode */; 201*14b24e2bSVaishali Kulkarni __le32 syn_phy_addr_hi /* physical address (high) of SYN buffer - relevent for passive mode */; 202*14b24e2bSVaishali Kulkarni __le32 reserved1[22]; 203*14b24e2bSVaishali Kulkarni }; 204*14b24e2bSVaishali Kulkarni 205*14b24e2bSVaishali Kulkarni 206*14b24e2bSVaishali Kulkarni /* 207*14b24e2bSVaishali Kulkarni * tcp IPv4/IPv6 enum 208*14b24e2bSVaishali Kulkarni */ 209*14b24e2bSVaishali Kulkarni enum tcp_seg_placement_event 210*14b24e2bSVaishali Kulkarni { 211*14b24e2bSVaishali Kulkarni TCP_EVENT_ADD_PEN, 212*14b24e2bSVaishali Kulkarni TCP_EVENT_ADD_NEW_ISLE, 213*14b24e2bSVaishali Kulkarni TCP_EVENT_ADD_ISLE_RIGHT, 214*14b24e2bSVaishali Kulkarni TCP_EVENT_ADD_ISLE_LEFT, 215*14b24e2bSVaishali Kulkarni TCP_EVENT_JOIN, 216*14b24e2bSVaishali Kulkarni TCP_EVENT_DELETE_ISLES, 217*14b24e2bSVaishali Kulkarni TCP_EVENT_NOP, 218*14b24e2bSVaishali Kulkarni MAX_TCP_SEG_PLACEMENT_EVENT 219*14b24e2bSVaishali Kulkarni }; 220*14b24e2bSVaishali Kulkarni 221*14b24e2bSVaishali Kulkarni 222*14b24e2bSVaishali Kulkarni /* 223*14b24e2bSVaishali Kulkarni * tcp init parameters 224*14b24e2bSVaishali Kulkarni */ 225*14b24e2bSVaishali Kulkarni struct tcp_update_params 226*14b24e2bSVaishali Kulkarni { 227*14b24e2bSVaishali Kulkarni __le16 flags; 228*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_MASK 0x1 229*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_REMOTE_MAC_ADDR_CHANGED_SHIFT 0 230*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_MSS_CHANGED_MASK 0x1 231*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_MSS_CHANGED_SHIFT 1 232*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_TTL_CHANGED_MASK 0x1 233*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_TTL_CHANGED_SHIFT 2 234*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_MASK 0x1 235*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_TOS_OR_TC_CHANGED_SHIFT 3 236*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_MASK 0x1 237*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_TIMEOUT_CHANGED_SHIFT 4 238*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_MASK 0x1 239*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_INTERVAL_CHANGED_SHIFT 5 240*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_MASK 0x1 241*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_MAX_RT_TIME_CHANGED_SHIFT 6 242*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_MASK 0x1 243*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_FLOW_LABEL_CHANGED_SHIFT 7 244*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_MASK 0x1 245*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_INITIAL_RCV_WND_CHANGED_SHIFT 8 246*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_MASK 0x1 247*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_MAX_PROBE_CNT_CHANGED_SHIFT 9 248*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_MASK 0x1 249*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_EN_CHANGED_SHIFT 10 250*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_MASK 0x1 251*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_NAGLE_EN_CHANGED_SHIFT 11 252*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_EN_MASK 0x1 253*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_EN_SHIFT 12 254*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_NAGLE_EN_MASK 0x1 255*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_NAGLE_EN_SHIFT 13 256*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_RESTART_MASK 0x1 257*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_KA_RESTART_SHIFT 14 258*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_MASK 0x1 259*14b24e2bSVaishali Kulkarni #define TCP_UPDATE_PARAMS_RETRANSMIT_RESTART_SHIFT 15 260*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_lo; 261*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_mid; 262*14b24e2bSVaishali Kulkarni __le16 remote_mac_addr_hi; 263*14b24e2bSVaishali Kulkarni __le16 mss; 264*14b24e2bSVaishali Kulkarni u8 ttl; 265*14b24e2bSVaishali Kulkarni u8 tos_or_tc; 266*14b24e2bSVaishali Kulkarni __le32 ka_timeout; 267*14b24e2bSVaishali Kulkarni __le32 ka_interval; 268*14b24e2bSVaishali Kulkarni __le32 max_rt_time; 269*14b24e2bSVaishali Kulkarni __le32 flow_label; 270*14b24e2bSVaishali Kulkarni __le32 initial_rcv_wnd; 271*14b24e2bSVaishali Kulkarni u8 ka_max_probe_cnt; 272*14b24e2bSVaishali Kulkarni u8 reserved1[7]; 273*14b24e2bSVaishali Kulkarni }; 274*14b24e2bSVaishali Kulkarni 275*14b24e2bSVaishali Kulkarni 276*14b24e2bSVaishali Kulkarni /* 277*14b24e2bSVaishali Kulkarni * toe upload parameters 278*14b24e2bSVaishali Kulkarni */ 279*14b24e2bSVaishali Kulkarni struct tcp_upload_params 280*14b24e2bSVaishali Kulkarni { 281*14b24e2bSVaishali Kulkarni __le32 rcv_next; 282*14b24e2bSVaishali Kulkarni __le32 snd_una; 283*14b24e2bSVaishali Kulkarni __le32 snd_next; 284*14b24e2bSVaishali Kulkarni __le32 snd_max; 285*14b24e2bSVaishali Kulkarni __le32 snd_wnd /* absolute send window (not scaled) */; 286*14b24e2bSVaishali Kulkarni __le32 rcv_wnd /* absolute receive window (not scaled) */; 287*14b24e2bSVaishali Kulkarni __le32 snd_wl1 /* the segment sequence number used for the last window update */; 288*14b24e2bSVaishali Kulkarni __le32 cwnd /* absolute congestion window */; 289*14b24e2bSVaishali Kulkarni __le32 ss_thresh; 290*14b24e2bSVaishali Kulkarni __le16 srtt /* in ms */; 291*14b24e2bSVaishali Kulkarni __le16 rtt_var /* in ms */; 292*14b24e2bSVaishali Kulkarni __le32 ts_time /* The current value of the adjusted timestamp */; 293*14b24e2bSVaishali Kulkarni __le32 ts_recent /* The timestamp value to send in the next ACK */; 294*14b24e2bSVaishali Kulkarni __le32 ts_recent_age /* The length of time, in ms, since the most recent timestamp was received */; 295*14b24e2bSVaishali Kulkarni __le32 total_rt /* The total time, in ms, that has been spent retransmitting the current TCP segment */; 296*14b24e2bSVaishali Kulkarni __le32 ka_timeout_delta /* The time remaining, in clock ticks, until the next keepalive timeout. A value of -1 indicates that the keepalive timer was not running when the connection was offloaded. */; 297*14b24e2bSVaishali Kulkarni __le32 rt_timeout_delta /* The time remaining, in clock ticks, until the next retransmit timeout. A value of -1 indicates that the retransmit timer was not running when the connection was offloaded. */; 298*14b24e2bSVaishali Kulkarni u8 dup_ack_cnt /* The number of ACKs that have been accepted for the same sequence number */; 299*14b24e2bSVaishali Kulkarni u8 snd_wnd_probe_cnt /* The current send window probe round */; 300*14b24e2bSVaishali Kulkarni u8 ka_probe_cnt /* the number of keepalive probes that have been sent that have not received a response */; 301*14b24e2bSVaishali Kulkarni u8 rt_cnt /* The number of retransmits that have been sent */; 302*14b24e2bSVaishali Kulkarni __le32 reserved; 303*14b24e2bSVaishali Kulkarni }; 304*14b24e2bSVaishali Kulkarni 305*14b24e2bSVaishali Kulkarni #endif /* __TCP_COMMON__ */ 306