1 /*******************************************************************************
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  *
21  * Copyright 2014 QLogic Corporation
22  * The contents of this file are subject to the terms of the
23  * QLogic End User License (the "License").
24  * You may not use this file except in compliance with the License.
25  *
26  * You can obtain a copy of the License at
27  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
28  * QLogic_End_User_Software_License.txt
29  * See the License for the specific language governing permissions
30  * and limitations under the License.
31  *
32  ******************************************************************************/
33 
34 #ifndef _L4STATES_H
35 #define _L4STATES_H
36 
37 #include "bcmtype.h"
38 
39 
40 
41 /*******************************************************************************
42  * Disconnect type.
43  ******************************************************************************/
44 
45 typedef enum _l4_disconnect_type_t
46 {
47     L4_DISCONNECT_TYPE_GRACEFUL         = 1,
48     L4_DISCONNECT_TYPE_ABORTIVE         = 2,
49 } l4_disconnect_type_t;
50 
51 
52 
53 /*******************************************************************************
54  * Upload reason.
55  ******************************************************************************/
56 
57 typedef enum _l4_upload_reason_t
58 {
59     L4_UPLOAD_REASON_UNKNOWN            = 0,
60     L4_UPLOAD_REASON_URG                = 1,
61     L4_UPLOAD_REASON_FRAGMENT           = 2,
62     L4_UPLOAD_REASON_IP_OPTION          = 3,
63     L4_UPLOAD_REASON_KEEP_ALIVE_TIMEOUT = 4,
64     L4_UPLOAD_REASON_UPLOAD_REQUESTED   = 5,
65     L4_UPLOAD_REASON_LOW_ACTIVITY       = 6,
66     L4_UPLOAD_REASON_HIGH_DROP_RATE     = 7,
67     L4_UPLOAD_REASON_SMALL_IO           = 8,
68     L4_UPLOAD_REASON_NO_BUFFER_PRE_POSTING     = 9,
69     L4_UPLOAD_REASON_HIGH_OUT_OF_ORDER_PACKETS = 10,
70     L4_UPLOAD_REASON_RETRANSMIT_TIMEOUT = 11,
71     L4_UPLOAD_REASON_MAX
72 } l4_upload_reason_t;
73 
74 
75 
76 /*******************************************************************************
77 * TCP connection state.
78  ******************************************************************************/
79 
80 typedef enum _l4_tcp_con_state_t
81 {
82     L4_TCP_CON_STATE_UNDEFINED          = 0,
83     L4_TCP_CON_STATE_CLOSED             = 1,
84     L4_TCP_CON_STATE_SYN_SENT           = 2,
85     L4_TCP_CON_STATE_SYN_RCVD           = 3,
86     L4_TCP_CON_STATE_ESTABLISHED        = 4,
87     L4_TCP_CON_STATE_FIN_WAIT1          = 5,
88     L4_TCP_CON_STATE_FIN_WAIT2          = 6,
89     L4_TCP_CON_STATE_CLOSING            = 7,
90     L4_TCP_CON_STATE_CLOSE_WAIT         = 8,
91     L4_TCP_CON_STATE_LAST_ACK           = 9,
92     L4_TCP_CON_STATE_TIME_WAIT          = 10,
93     L4_TCP_CON_STATE_LISTEN             = 11,
94     L4_TCP_CON_STATE_MAX
95 } l4_tcp_con_state_t;
96 
97 
98 
99 /*******************************************************************************
100  * Neighbor information.
101  ******************************************************************************/
102 
103 typedef struct _l4_neigh_const_state_t
104 {
105     u8_t src_addr[8];
106     u16_t vlan_tag;     /* 4 MSBs are always 0 */
107 } l4_neigh_const_state_t;
108 
109 
110 typedef struct _l4_neigh_cached_state_t
111 {
112     u8_t dst_addr[8];
113 
114     u32_t host_reachability_delta;
115 } l4_neigh_cached_state_t;
116 
117 
118 typedef struct _l4_neigh_delegated_state_t
119 {
120     u32_t nic_reachability_delta;
121 } l4_neigh_delegated_state_t;
122 
123 
124 
125 /*******************************************************************************
126  * Path information.
127  ******************************************************************************/
128 
129 typedef struct _l4_path_const_state_t
130 {
131     u8_t ip_version;
132     #define IP_VERSION_IPV4     4
133     #define IP_VERSION_IPV6     6
134 
135     u8_t _pad[3];
136 
137     union _u_ip_type_t
138     {
139         struct _ip_v4_t
140         {
141             u32_t dst_ip;
142             u32_t src_ip;
143         } ipv4;
144 
145         struct _ip_v6_t
146         {
147             u32_t dst_ip[4];
148             u32_t src_ip[4];
149         } ipv6;
150     } u;
151 } l4_path_const_state_t;
152 
153 
154 typedef struct _l4_path_cached_state_t
155 {
156     u32_t path_mtu;
157 } l4_path_cached_state_t;
158 
159 
160 typedef struct _l4_path_delegated_state_t
161 {
162     u16_t ipv4_current_ip_id;
163     u16_t _pad;
164 } l4_path_delegated_state_t;
165 
166 
167 
168 /*******************************************************************************
169  * TCP destination and source ports.
170  ******************************************************************************/
171 
172 typedef struct _l4_tcp_const_state_t
173 {
174     u16_t tcp_flags;
175     #define TCP_FLAG_ENABLE_TIME_STAMP      0x0001
176     #define TCP_FLAG_ENABLE_SACK            0x0002
177     #define TCP_FLAG_ENABLE_WIN_SCALING     0x0004
178 
179     u16_t dst_port; /* in host order */
180     u16_t src_port; /* in host order */
181 
182     u16_t remote_mss;
183 
184     u8_t snd_seg_scale:4;   /* 0 if win scaling is disabled */
185     u8_t rcv_seg_scale:4;   /* 0 if win scaling is disabled */
186     u8_t _pad[3];
187 
188     u32_t hash_value;
189 } l4_tcp_const_state_t;
190 
191 
192 typedef struct _l4_tcp_cached_state_t
193 {
194     u16_t tcp_flags;
195     #define TCP_FLAG_ENABLE_KEEP_ALIVE      0x01
196     #define TCP_FLAG_ENABLE_NAGLING         0x02
197     #define TCP_FLAG_RESTART_KEEP_ALIVE     0x04
198     #define TCP_FLAG_RESTART_MAX_RT         0x08
199     #define TCP_FLAG_UPDATE_RCV_WINDOW      0x10
200 
201     u16_t _pad;
202 
203     u32_t initial_rcv_wnd;
204     u8_t ttl_or_hop_limit;
205     u8_t tos_or_traffic_class;
206     u8_t ka_probe_cnt;
207     u8_t user_priority; /* 5 MSBs are always 0 */
208     u32_t rcv_indication_size;
209     u32_t ka_time_out;
210     u32_t ka_interval;
211     u32_t max_rt;
212 
213     /* ipv6 fields. */
214     u32_t flow_label;
215 } l4_tcp_cached_state_t;
216 
217 
218 typedef struct _l4_tcp_delegated_state_t
219 {
220     u32_t con_state;  /* l4_tcp_con_state_t */
221 
222     u32_t recv_next;
223     u32_t recv_win_seq; /* ndis_tcp_delegated->RcvWnd + ndis_tcp_delegated->RcvNxt    */
224     u32_t send_una;
225     u32_t send_next;
226     u32_t send_max;
227     u32_t send_win;     /* ndis_tcp_delegated->SndWnd    + ndis_tcp_delegated->SndUna */
228     u32_t max_send_win; /* ndis_tcp_delegated->MaxSndWnd */
229     u32_t send_wl1;
230     u32_t send_cwin;    /* ndis_tcp_delegated->CWnd      + ndis_tcp_delegated->SndUna */
231     u32_t ss_thresh;
232     u16_t sm_rtt;       /* ndis_tcp_delegated->SRtt */
233     u16_t sm_delta;     /* ndis_tcp_delegated->RttVar */
234     u32_t tstamp;       /* ndis_tcp_delegated->TsTime */
235     u32_t ts_recent;
236     u32_t ts_recent_age;
237     u32_t total_rt;
238     u8_t dup_ack_count;
239     u8_t snd_wnd_probe_count;
240     u16_t _pad;
241 
242     /* TODO: remove the union in the next if version change. */
243     union _keep_alive_or_retransmit_t
244     {
245         struct _keep_alive_t
246         {
247             u8_t probe_cnt;
248             u32_t timeout_delta;
249         } keep_alive;
250 
251         struct _retransmit_t
252         {
253             u8_t num_retx;
254             u32_t retx_ms;
255         } retransmit;
256     } u;
257 } l4_tcp_delegated_state_t;
258 
259 
260 
261 /*******************************************************************************
262  * Set offload parameters.
263  ******************************************************************************/
264 
265 typedef struct _l4_ofld_params_t
266 {
267     u32_t flags;
268     #define OFLD_PARAM_FLAG_SNAP_ENCAP          0x0001
269 
270     u32_t ticks_per_second;
271     u8_t ack_frequency;
272     u8_t delayed_ack_ticks;
273     u8_t max_retx;
274     u8_t doubt_reachability_retx;
275     u32_t sws_prevention_ticks;
276     u32_t dup_ack_threshold;
277     u32_t push_ticks;
278     u32_t nce_stale_ticks;
279     u16_t starting_ip_id;
280     u16_t _pad;
281 } l4_ofld_params_t;
282 
283 
284 
285 #endif /* _L4STATES_H */
286 
287