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