xref: /openbmc/linux/include/scsi/iscsi_if.h (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
239e84790SAlex Aizman /*
339e84790SAlex Aizman  * iSCSI User/Kernel Shares (Defines, Constants, Protocol definitions, etc)
439e84790SAlex Aizman  *
539e84790SAlex Aizman  * Copyright (C) 2005 Dmitry Yusupov
639e84790SAlex Aizman  * Copyright (C) 2005 Alex Aizman
739e84790SAlex Aizman  * maintained by open-iscsi@googlegroups.com
839e84790SAlex Aizman  */
939e84790SAlex Aizman 
1039e84790SAlex Aizman #ifndef ISCSI_IF_H
1139e84790SAlex Aizman #define ISCSI_IF_H
1239e84790SAlex Aizman 
1339e84790SAlex Aizman #include <scsi/iscsi_proto.h>
1443514774SMichael Chan #include <linux/in.h>
1543514774SMichael Chan #include <linux/in6.h>
1643514774SMichael Chan 
1743514774SMichael Chan #define ISCSI_NL_GRP_ISCSID	1
1843514774SMichael Chan #define ISCSI_NL_GRP_UIP	2
1939e84790SAlex Aizman 
2039e84790SAlex Aizman #define UEVENT_BASE			10
2139e84790SAlex Aizman #define KEVENT_BASE			100
2239e84790SAlex Aizman #define ISCSI_ERR_BASE			1000
2339e84790SAlex Aizman 
2439e84790SAlex Aizman enum iscsi_uevent_e {
2539e84790SAlex Aizman 	ISCSI_UEVENT_UNKNOWN		= 0,
2639e84790SAlex Aizman 
2739e84790SAlex Aizman 	/* down events */
2839e84790SAlex Aizman 	ISCSI_UEVENT_CREATE_SESSION	= UEVENT_BASE + 1,
2939e84790SAlex Aizman 	ISCSI_UEVENT_DESTROY_SESSION	= UEVENT_BASE + 2,
3039e84790SAlex Aizman 	ISCSI_UEVENT_CREATE_CONN	= UEVENT_BASE + 3,
3139e84790SAlex Aizman 	ISCSI_UEVENT_DESTROY_CONN	= UEVENT_BASE + 4,
3239e84790SAlex Aizman 	ISCSI_UEVENT_BIND_CONN		= UEVENT_BASE + 5,
3339e84790SAlex Aizman 	ISCSI_UEVENT_SET_PARAM		= UEVENT_BASE + 6,
3439e84790SAlex Aizman 	ISCSI_UEVENT_START_CONN		= UEVENT_BASE + 7,
3539e84790SAlex Aizman 	ISCSI_UEVENT_STOP_CONN		= UEVENT_BASE + 8,
3639e84790SAlex Aizman 	ISCSI_UEVENT_SEND_PDU		= UEVENT_BASE + 9,
3739e84790SAlex Aizman 	ISCSI_UEVENT_GET_STATS		= UEVENT_BASE + 10,
3839e84790SAlex Aizman 	ISCSI_UEVENT_GET_PARAM		= UEVENT_BASE + 11,
3939e84790SAlex Aizman 
40264faaaaSOr Gerlitz 	ISCSI_UEVENT_TRANSPORT_EP_CONNECT	= UEVENT_BASE + 12,
41264faaaaSOr Gerlitz 	ISCSI_UEVENT_TRANSPORT_EP_POLL		= UEVENT_BASE + 13,
42264faaaaSOr Gerlitz 	ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT	= UEVENT_BASE + 14,
43264faaaaSOr Gerlitz 
4401cb225dSMike Christie 	ISCSI_UEVENT_TGT_DSCVR		= UEVENT_BASE + 15,
451d9bf13aSMike Christie 	ISCSI_UEVENT_SET_HOST_PARAM	= UEVENT_BASE + 16,
4626974789SMike Christie 	ISCSI_UEVENT_UNBIND_SESSION	= UEVENT_BASE + 17,
4740753caaSMike Christie 	ISCSI_UEVENT_CREATE_BOUND_SESSION		= UEVENT_BASE + 18,
4810eb0f01SMike Christie 	ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST	= UEVENT_BASE + 19,
4901cb225dSMike Christie 
5043514774SMichael Chan 	ISCSI_UEVENT_PATH_UPDATE	= UEVENT_BASE + 20,
5156c155b5SMike Christie 	ISCSI_UEVENT_SET_IFACE_PARAMS	= UEVENT_BASE + 21,
52ac20c7bfSVikas Chaudhary 	ISCSI_UEVENT_PING		= UEVENT_BASE + 22,
536260a5d2SNilesh Javali 	ISCSI_UEVENT_GET_CHAP		= UEVENT_BASE + 23,
546260a5d2SNilesh Javali 	ISCSI_UEVENT_DELETE_CHAP	= UEVENT_BASE + 24,
55c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_SET_FLASHNODE_PARAMS	= UEVENT_BASE + 25,
56c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_NEW_FLASHNODE	= UEVENT_BASE + 26,
57c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_DEL_FLASHNODE	= UEVENT_BASE + 27,
58c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_LOGIN_FLASHNODE	= UEVENT_BASE + 28,
59c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_LOGOUT_FLASHNODE	= UEVENT_BASE + 29,
60c6a4bb2eSAdheer Chandravanshi 	ISCSI_UEVENT_LOGOUT_FLASHNODE_SID	= UEVENT_BASE + 30,
613af142feSAdheer Chandravanshi 	ISCSI_UEVENT_SET_CHAP		= UEVENT_BASE + 31,
626fa7c554SLalit Chandivade 	ISCSI_UEVENT_GET_HOST_STATS	= UEVENT_BASE + 32,
63*cc6b32eeSFrank Mayhar 	ISCSI_UEVENT_DESTROY_SESSION_ASYNC	= UEVENT_BASE + 33,
6443514774SMichael Chan 
6539e84790SAlex Aizman 	/* up events */
6639e84790SAlex Aizman 	ISCSI_KEVENT_RECV_PDU		= KEVENT_BASE + 1,
6739e84790SAlex Aizman 	ISCSI_KEVENT_CONN_ERROR		= KEVENT_BASE + 2,
6839e84790SAlex Aizman 	ISCSI_KEVENT_IF_ERROR		= KEVENT_BASE + 3,
6953cb8a1fSMike Christie 	ISCSI_KEVENT_DESTROY_SESSION	= KEVENT_BASE + 4,
7026974789SMike Christie 	ISCSI_KEVENT_UNBIND_SESSION	= KEVENT_BASE + 5,
7126974789SMike Christie 	ISCSI_KEVENT_CREATE_SESSION	= KEVENT_BASE + 6,
7243514774SMichael Chan 
7343514774SMichael Chan 	ISCSI_KEVENT_PATH_REQ		= KEVENT_BASE + 7,
7443514774SMichael Chan 	ISCSI_KEVENT_IF_DOWN		= KEVENT_BASE + 8,
7517fa575eSManish Rangankar 	ISCSI_KEVENT_CONN_LOGIN_STATE   = KEVENT_BASE + 9,
76a11e2545SVikas Chaudhary 	ISCSI_KEVENT_HOST_EVENT		= KEVENT_BASE + 10,
77ac20c7bfSVikas Chaudhary 	ISCSI_KEVENT_PING_COMP		= KEVENT_BASE + 11,
7839e84790SAlex Aizman };
7939e84790SAlex Aizman 
8001cb225dSMike Christie enum iscsi_tgt_dscvr {
8101cb225dSMike Christie 	ISCSI_TGT_DSCVR_SEND_TARGETS	= 1,
8201cb225dSMike Christie 	ISCSI_TGT_DSCVR_ISNS		= 2,
8301cb225dSMike Christie 	ISCSI_TGT_DSCVR_SLP		= 3,
8401cb225dSMike Christie };
8501cb225dSMike Christie 
86a11e2545SVikas Chaudhary enum iscsi_host_event_code {
87a11e2545SVikas Chaudhary 	ISCSI_EVENT_LINKUP		= 1,
88a11e2545SVikas Chaudhary 	ISCSI_EVENT_LINKDOWN,
89a11e2545SVikas Chaudhary 	/* must always be last */
90a11e2545SVikas Chaudhary 	ISCSI_EVENT_MAX,
91a11e2545SVikas Chaudhary };
92a11e2545SVikas Chaudhary 
9339e84790SAlex Aizman struct iscsi_uevent {
9439e84790SAlex Aizman 	uint32_t type; /* k/u events type */
9539e84790SAlex Aizman 	uint32_t iferror; /* carries interface or resource errors */
9639e84790SAlex Aizman 	uint64_t transport_handle;
9739e84790SAlex Aizman 
9839e84790SAlex Aizman 	union {
9939e84790SAlex Aizman 		/* messages u -> k */
10039e84790SAlex Aizman 		struct msg_create_session {
10139e84790SAlex Aizman 			uint32_t	initial_cmdsn;
1021548271eSMike Christie 			uint16_t	cmds_max;
1031548271eSMike Christie 			uint16_t	queue_depth;
10439e84790SAlex Aizman 		} c_session;
10540753caaSMike Christie 		struct msg_create_bound_session {
106d82ff9beSMike Christie 			uint64_t	ep_handle;
10740753caaSMike Christie 			uint32_t	initial_cmdsn;
10840753caaSMike Christie 			uint16_t	cmds_max;
10940753caaSMike Christie 			uint16_t	queue_depth;
11040753caaSMike Christie 		} c_bound_session;
11139e84790SAlex Aizman 		struct msg_destroy_session {
11239e84790SAlex Aizman 			uint32_t	sid;
11339e84790SAlex Aizman 		} d_session;
11439e84790SAlex Aizman 		struct msg_create_conn {
11539e84790SAlex Aizman 			uint32_t	sid;
116b5c7a12dSMike Christie 			uint32_t	cid;
11739e84790SAlex Aizman 		} c_conn;
11839e84790SAlex Aizman 		struct msg_bind_conn {
119b5c7a12dSMike Christie 			uint32_t	sid;
120b5c7a12dSMike Christie 			uint32_t	cid;
121264faaaaSOr Gerlitz 			uint64_t	transport_eph;
12239e84790SAlex Aizman 			uint32_t	is_leading;
12339e84790SAlex Aizman 		} b_conn;
12439e84790SAlex Aizman 		struct msg_destroy_conn {
125b5c7a12dSMike Christie 			uint32_t	sid;
12639e84790SAlex Aizman 			uint32_t	cid;
12739e84790SAlex Aizman 		} d_conn;
12839e84790SAlex Aizman 		struct msg_send_pdu {
129b5c7a12dSMike Christie 			uint32_t	sid;
130b5c7a12dSMike Christie 			uint32_t	cid;
13139e84790SAlex Aizman 			uint32_t	hdr_size;
13239e84790SAlex Aizman 			uint32_t	data_size;
13339e84790SAlex Aizman 		} send_pdu;
13439e84790SAlex Aizman 		struct msg_set_param {
135b5c7a12dSMike Christie 			uint32_t	sid;
136b5c7a12dSMike Christie 			uint32_t	cid;
13739e84790SAlex Aizman 			uint32_t	param; /* enum iscsi_param */
138fd7255f5SMike Christie 			uint32_t	len;
13939e84790SAlex Aizman 		} set_param;
14039e84790SAlex Aizman 		struct msg_start_conn {
141b5c7a12dSMike Christie 			uint32_t	sid;
142b5c7a12dSMike Christie 			uint32_t	cid;
14339e84790SAlex Aizman 		} start_conn;
14439e84790SAlex Aizman 		struct msg_stop_conn {
145b5c7a12dSMike Christie 			uint32_t	sid;
146b5c7a12dSMike Christie 			uint32_t	cid;
14739e84790SAlex Aizman 			uint64_t	conn_handle;
14839e84790SAlex Aizman 			uint32_t	flag;
14939e84790SAlex Aizman 		} stop_conn;
15039e84790SAlex Aizman 		struct msg_get_stats {
151b5c7a12dSMike Christie 			uint32_t	sid;
152b5c7a12dSMike Christie 			uint32_t	cid;
15339e84790SAlex Aizman 		} get_stats;
154264faaaaSOr Gerlitz 		struct msg_transport_connect {
155264faaaaSOr Gerlitz 			uint32_t	non_blocking;
156264faaaaSOr Gerlitz 		} ep_connect;
15710eb0f01SMike Christie 		struct msg_transport_connect_through_host {
15810eb0f01SMike Christie 			uint32_t	host_no;
15910eb0f01SMike Christie 			uint32_t	non_blocking;
16010eb0f01SMike Christie 		} ep_connect_through_host;
161264faaaaSOr Gerlitz 		struct msg_transport_poll {
162264faaaaSOr Gerlitz 			uint64_t	ep_handle;
163264faaaaSOr Gerlitz 			uint32_t	timeout_ms;
164264faaaaSOr Gerlitz 		} ep_poll;
165264faaaaSOr Gerlitz 		struct msg_transport_disconnect {
166264faaaaSOr Gerlitz 			uint64_t	ep_handle;
167264faaaaSOr Gerlitz 		} ep_disconnect;
16801cb225dSMike Christie 		struct msg_tgt_dscvr {
16901cb225dSMike Christie 			enum iscsi_tgt_dscvr	type;
17001cb225dSMike Christie 			uint32_t	host_no;
17101cb225dSMike Christie 			/*
17201cb225dSMike Christie  			 * enable = 1 to establish a new connection
17301cb225dSMike Christie 			 * with the server. enable = 0 to disconnect
17401cb225dSMike Christie 			 * from the server. Used primarily to switch
17501cb225dSMike Christie 			 * from one iSNS server to another.
17601cb225dSMike Christie 			 */
17701cb225dSMike Christie 			uint32_t	enable;
17801cb225dSMike Christie 		} tgt_dscvr;
1791d9bf13aSMike Christie 		struct msg_set_host_param {
1801d9bf13aSMike Christie 			uint32_t	host_no;
1811d9bf13aSMike Christie 			uint32_t	param; /* enum iscsi_host_param */
1821d9bf13aSMike Christie 			uint32_t	len;
1831d9bf13aSMike Christie 		} set_host_param;
18443514774SMichael Chan 		struct msg_set_path {
18543514774SMichael Chan 			uint32_t	host_no;
18643514774SMichael Chan 		} set_path;
18756c155b5SMike Christie 		struct msg_set_iface_params {
18856c155b5SMike Christie 			uint32_t	host_no;
18956c155b5SMike Christie 			uint32_t	count;
19056c155b5SMike Christie 		} set_iface_params;
191ac20c7bfSVikas Chaudhary 		struct msg_iscsi_ping {
192ac20c7bfSVikas Chaudhary 			uint32_t        host_no;
193ac20c7bfSVikas Chaudhary 			uint32_t        iface_num;
194ac20c7bfSVikas Chaudhary 			uint32_t        iface_type;
195ac20c7bfSVikas Chaudhary 			uint32_t        payload_size;
196ac20c7bfSVikas Chaudhary 			uint32_t	pid;	/* unique ping id associated
197ac20c7bfSVikas Chaudhary 						   with each ping request */
198ac20c7bfSVikas Chaudhary 		} iscsi_ping;
1996260a5d2SNilesh Javali 		struct msg_get_chap {
2006260a5d2SNilesh Javali 			uint32_t	host_no;
2016260a5d2SNilesh Javali 			uint32_t	num_entries; /* number of CHAP entries
2026260a5d2SNilesh Javali 						      * on request, number of
2036260a5d2SNilesh Javali 						      * valid CHAP entries on
2046260a5d2SNilesh Javali 						      * response */
2056260a5d2SNilesh Javali 			uint16_t	chap_tbl_idx;
2066260a5d2SNilesh Javali 		} get_chap;
2076260a5d2SNilesh Javali 		struct msg_delete_chap {
2086260a5d2SNilesh Javali 		       uint32_t        host_no;
2096260a5d2SNilesh Javali 		       uint16_t        chap_tbl_idx;
2106260a5d2SNilesh Javali 		} delete_chap;
211c6a4bb2eSAdheer Chandravanshi 		struct msg_set_flashnode_param {
212c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
213c6a4bb2eSAdheer Chandravanshi 			uint32_t	flashnode_idx;
214c6a4bb2eSAdheer Chandravanshi 			uint32_t	count;
215c6a4bb2eSAdheer Chandravanshi 		} set_flashnode;
216c6a4bb2eSAdheer Chandravanshi 		struct msg_new_flashnode {
217c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
218c6a4bb2eSAdheer Chandravanshi 			uint32_t	len;
219c6a4bb2eSAdheer Chandravanshi 		} new_flashnode;
220c6a4bb2eSAdheer Chandravanshi 		struct msg_del_flashnode {
221c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
222c6a4bb2eSAdheer Chandravanshi 			uint32_t	flashnode_idx;
223c6a4bb2eSAdheer Chandravanshi 		} del_flashnode;
224c6a4bb2eSAdheer Chandravanshi 		struct msg_login_flashnode {
225c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
226c6a4bb2eSAdheer Chandravanshi 			uint32_t	flashnode_idx;
227c6a4bb2eSAdheer Chandravanshi 		} login_flashnode;
228c6a4bb2eSAdheer Chandravanshi 		struct msg_logout_flashnode {
229c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
230c6a4bb2eSAdheer Chandravanshi 			uint32_t	flashnode_idx;
231c6a4bb2eSAdheer Chandravanshi 		} logout_flashnode;
232c6a4bb2eSAdheer Chandravanshi 		struct msg_logout_flashnode_sid {
233c6a4bb2eSAdheer Chandravanshi 			uint32_t	host_no;
234c6a4bb2eSAdheer Chandravanshi 			uint32_t	sid;
235c6a4bb2eSAdheer Chandravanshi 		} logout_flashnode_sid;
2366fa7c554SLalit Chandivade 		struct msg_get_host_stats {
2376fa7c554SLalit Chandivade 			uint32_t host_no;
2386fa7c554SLalit Chandivade 		} get_host_stats;
23939e84790SAlex Aizman 	} u;
24039e84790SAlex Aizman 	union {
24139e84790SAlex Aizman 		/* messages k -> u */
24239e84790SAlex Aizman 		int			retcode;
24339e84790SAlex Aizman 		struct msg_create_session_ret {
24439e84790SAlex Aizman 			uint32_t	sid;
245b5c7a12dSMike Christie 			uint32_t	host_no;
24639e84790SAlex Aizman 		} c_session_ret;
247b5c7a12dSMike Christie 		struct msg_create_conn_ret {
248b5c7a12dSMike Christie 			uint32_t	sid;
249b5c7a12dSMike Christie 			uint32_t	cid;
250b5c7a12dSMike Christie 		} c_conn_ret;
25126974789SMike Christie 		struct msg_unbind_session {
25226974789SMike Christie 			uint32_t	sid;
25326974789SMike Christie 			uint32_t	host_no;
25426974789SMike Christie 		} unbind_session;
25539e84790SAlex Aizman 		struct msg_recv_req {
256b5c7a12dSMike Christie 			uint32_t	sid;
257b5c7a12dSMike Christie 			uint32_t	cid;
25839e84790SAlex Aizman 			uint64_t	recv_handle;
25939e84790SAlex Aizman 		} recv_req;
26017fa575eSManish Rangankar 		struct msg_conn_login {
26117fa575eSManish Rangankar 			uint32_t        sid;
26217fa575eSManish Rangankar 			uint32_t        cid;
26317fa575eSManish Rangankar 			uint32_t        state; /* enum iscsi_conn_state */
26417fa575eSManish Rangankar 		} conn_login;
26539e84790SAlex Aizman 		struct msg_conn_error {
266b5c7a12dSMike Christie 			uint32_t	sid;
267b5c7a12dSMike Christie 			uint32_t	cid;
26839e84790SAlex Aizman 			uint32_t	error; /* enum iscsi_err */
26939e84790SAlex Aizman 		} connerror;
27053cb8a1fSMike Christie 		struct msg_session_destroyed {
27153cb8a1fSMike Christie 			uint32_t	host_no;
27253cb8a1fSMike Christie 			uint32_t	sid;
27353cb8a1fSMike Christie 		} d_session;
274264faaaaSOr Gerlitz 		struct msg_transport_connect_ret {
275264faaaaSOr Gerlitz 			uint64_t	handle;
276264faaaaSOr Gerlitz 		} ep_connect_ret;
27743514774SMichael Chan 		struct msg_req_path {
27843514774SMichael Chan 			uint32_t	host_no;
27943514774SMichael Chan 		} req_path;
28043514774SMichael Chan 		struct msg_notify_if_down {
28143514774SMichael Chan 			uint32_t	host_no;
28243514774SMichael Chan 		} notify_if_down;
283a11e2545SVikas Chaudhary 		struct msg_host_event {
284a11e2545SVikas Chaudhary 			uint32_t	host_no;
285a11e2545SVikas Chaudhary 			uint32_t	data_size;
286a11e2545SVikas Chaudhary 			enum iscsi_host_event_code code;
287a11e2545SVikas Chaudhary 		} host_event;
288ac20c7bfSVikas Chaudhary 		struct msg_ping_comp {
289ac20c7bfSVikas Chaudhary 			uint32_t        host_no;
2901a590cabSVikas Chaudhary 			uint32_t        status; /* enum
2911a590cabSVikas Chaudhary 						 * iscsi_ping_status_code */
292ac20c7bfSVikas Chaudhary 			uint32_t	pid;	/* unique ping id associated
293ac20c7bfSVikas Chaudhary 						   with each ping request */
294ac20c7bfSVikas Chaudhary 			uint32_t        data_size;
295ac20c7bfSVikas Chaudhary 		} ping_comp;
296c6a4bb2eSAdheer Chandravanshi 		struct msg_new_flashnode_ret {
297c6a4bb2eSAdheer Chandravanshi 			uint32_t	flashnode_idx;
298c6a4bb2eSAdheer Chandravanshi 		} new_flashnode_ret;
29939e84790SAlex Aizman 	} r;
30039e84790SAlex Aizman } __attribute__ ((aligned (sizeof(uint64_t))));
30139e84790SAlex Aizman 
30256c155b5SMike Christie enum iscsi_param_type {
30356c155b5SMike Christie 	ISCSI_PARAM,		/* iscsi_param (session, conn, target, LU) */
30456c155b5SMike Christie 	ISCSI_HOST_PARAM,	/* iscsi_host_param */
30556c155b5SMike Christie 	ISCSI_NET_PARAM,	/* iscsi_net_param */
306c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PARAM,	/* iscsi_flashnode_param */
3073af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM,	/* iscsi_chap_param */
3083e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM,	/* iscsi_iface_param */
30956c155b5SMike Christie };
31056c155b5SMike Christie 
3113af142feSAdheer Chandravanshi /* structure for minimalist usecase */
3123af142feSAdheer Chandravanshi struct iscsi_param_info {
3133af142feSAdheer Chandravanshi 	uint32_t len;		/* Actual length of the param value */
3143af142feSAdheer Chandravanshi 	uint16_t param;		/* iscsi param */
3155febf6d6SGustavo A. R. Silva 	uint8_t value[];	/* length sized value follows */
3163af142feSAdheer Chandravanshi } __packed;
3173af142feSAdheer Chandravanshi 
31856c155b5SMike Christie struct iscsi_iface_param_info {
31956c155b5SMike Christie 	uint32_t iface_num;	/* iface number, 0 - n */
32056c155b5SMike Christie 	uint32_t len;		/* Actual length of the param */
32156c155b5SMike Christie 	uint16_t param;		/* iscsi param value */
32256c155b5SMike Christie 	uint8_t iface_type;	/* IPv4 or IPv6 */
32356c155b5SMike Christie 	uint8_t param_type;	/* iscsi_param_type */
3245febf6d6SGustavo A. R. Silva 	uint8_t value[];	/* length sized value follows */
32556c155b5SMike Christie } __packed;
32656c155b5SMike Christie 
32739e84790SAlex Aizman /*
32843514774SMichael Chan  * To keep the struct iscsi_uevent size the same for userspace code
32943514774SMichael Chan  * compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and
33043514774SMichael Chan  * ISCSI_KEVENT_PATH_REQ is defined separately and comes after the
33143514774SMichael Chan  * struct iscsi_uevent in the NETLINK_ISCSI message.
33243514774SMichael Chan  */
33343514774SMichael Chan struct iscsi_path {
33443514774SMichael Chan 	uint64_t	handle;
33543514774SMichael Chan 	uint8_t		mac_addr[6];
33643514774SMichael Chan 	uint8_t		mac_addr_old[6];
33743514774SMichael Chan 	uint32_t	ip_addr_len;	/* 4 or 16 */
33843514774SMichael Chan 	union {
33943514774SMichael Chan 		struct in_addr	v4_addr;
34043514774SMichael Chan 		struct in6_addr	v6_addr;
34143514774SMichael Chan 	} src;
34243514774SMichael Chan 	union {
34343514774SMichael Chan 		struct in_addr	v4_addr;
34443514774SMichael Chan 		struct in6_addr	v6_addr;
34543514774SMichael Chan 	} dst;
34643514774SMichael Chan 	uint16_t	vlan_id;
34743514774SMichael Chan 	uint16_t	pmtu;
34843514774SMichael Chan } __attribute__ ((aligned (sizeof(uint64_t))));
34943514774SMichael Chan 
35056c155b5SMike Christie /* iscsi iface enabled/disabled setting */
35156c155b5SMike Christie #define ISCSI_IFACE_DISABLE	0x01
35256c155b5SMike Christie #define ISCSI_IFACE_ENABLE	0x02
35356c155b5SMike Christie 
35456c155b5SMike Christie /* ipv4 bootproto */
35556c155b5SMike Christie #define ISCSI_BOOTPROTO_STATIC		0x01
35656c155b5SMike Christie #define ISCSI_BOOTPROTO_DHCP		0x02
35756c155b5SMike Christie 
35856c155b5SMike Christie /* ipv6 addr autoconfig type */
35956c155b5SMike Christie #define ISCSI_IPV6_AUTOCFG_DISABLE		0x01
36056c155b5SMike Christie #define ISCSI_IPV6_AUTOCFG_ND_ENABLE		0x02
36156c155b5SMike Christie #define ISCSI_IPV6_AUTOCFG_DHCPV6_ENABLE	0x03
36256c155b5SMike Christie 
36356c155b5SMike Christie /* ipv6 link local addr type */
36456c155b5SMike Christie #define ISCSI_IPV6_LINKLOCAL_AUTOCFG_ENABLE	0x01
36556c155b5SMike Christie #define ISCSI_IPV6_LINKLOCAL_AUTOCFG_DISABLE	0x02
36656c155b5SMike Christie 
36756c155b5SMike Christie /* ipv6 router addr type */
36856c155b5SMike Christie #define ISCSI_IPV6_ROUTER_AUTOCFG_ENABLE	0x01
36956c155b5SMike Christie #define ISCSI_IPV6_ROUTER_AUTOCFG_DISABLE	0x02
37056c155b5SMike Christie 
37156c155b5SMike Christie #define ISCSI_IFACE_TYPE_IPV4		0x01
37256c155b5SMike Christie #define ISCSI_IFACE_TYPE_IPV6		0x02
37356c155b5SMike Christie 
3744223b9e9SMike Christie #define ISCSI_MAX_VLAN_ID		4095
3754223b9e9SMike Christie #define ISCSI_MAX_VLAN_PRIORITY		7
3764223b9e9SMike Christie 
3774223b9e9SMike Christie /* iscsi vlan enable/disabled setting */
3784223b9e9SMike Christie #define ISCSI_VLAN_DISABLE	0x01
3794223b9e9SMike Christie #define ISCSI_VLAN_ENABLE	0x02
3804223b9e9SMike Christie 
3813e0f65b3SHarish Zunjarrao /* iscsi generic enable/disabled setting for various features */
3823e0f65b3SHarish Zunjarrao #define ISCSI_NET_PARAM_DISABLE		0x01
3833e0f65b3SHarish Zunjarrao #define ISCSI_NET_PARAM_ENABLE		0x02
3843e0f65b3SHarish Zunjarrao 
38556c155b5SMike Christie /* iSCSI network params */
38656c155b5SMike Christie enum iscsi_net_param {
38756c155b5SMike Christie 	ISCSI_NET_PARAM_IPV4_ADDR		= 1,
388b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_SUBNET,
389b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_GW,
390b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_BOOTPROTO,
391b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_MAC,
392b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_LINKLOCAL,
393b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ADDR,
394b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ROUTER,
395b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG,
396b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,
397b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,
398b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IFACE_ENABLE,
399b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_VLAN_ID,
400b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_VLAN_PRIORITY,
401b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_VLAN_ENABLED,
402b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_VLAN_TAG,
403b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IFACE_TYPE,
404b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_IFACE_NAME,
405b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_MTU,
406b867cda4SHarish Zunjarrao 	ISCSI_NET_PARAM_PORT,
4073e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPADDR_STATE,
4083e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,
4093e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ROUTER_STATE,
4103e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_DELAYED_ACK_EN,
4113e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_TCP_NAGLE_DISABLE,
4123e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_TCP_WSF_DISABLE,
4133e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_TCP_WSF,
4143e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_TCP_TIMER_SCALE,
4153e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
4163e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_CACHE_ID,
4173e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
4183e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
4193e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_TOS_EN,
4203e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_TOS,
4213e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
4223e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
4233e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
4243e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
4253e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
4263e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
4273e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
4283e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_FRAGMENT_DISABLE,
4293e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
4303e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV4_TTL,
4313e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
4323e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_MLD_EN,
4333e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
4343e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
4353e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
4363e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
4373e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
4383e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
4393e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_DUP_ADDR_DETECT_CNT,
4403e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
4413e0f65b3SHarish Zunjarrao 	ISCSI_NET_PARAM_REDIRECT_EN,
4423e0f65b3SHarish Zunjarrao };
4433e0f65b3SHarish Zunjarrao 
4443e0f65b3SHarish Zunjarrao enum iscsi_ipaddress_state {
4453e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_UNCONFIGURED,
4463e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_ACQUIRING,
4473e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_TENTATIVE,
4483e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_VALID,
4493e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_DISABLING,
4503e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_INVALID,
4513e0f65b3SHarish Zunjarrao 	ISCSI_IPDDRESS_STATE_DEPRECATED,
4523e0f65b3SHarish Zunjarrao };
4533e0f65b3SHarish Zunjarrao 
4543e0f65b3SHarish Zunjarrao enum iscsi_router_state {
4553e0f65b3SHarish Zunjarrao 	ISCSI_ROUTER_STATE_UNKNOWN,
4563e0f65b3SHarish Zunjarrao 	ISCSI_ROUTER_STATE_ADVERTISED,
4573e0f65b3SHarish Zunjarrao 	ISCSI_ROUTER_STATE_MANUAL,
4583e0f65b3SHarish Zunjarrao 	ISCSI_ROUTER_STATE_STALE,
4593e0f65b3SHarish Zunjarrao };
4603e0f65b3SHarish Zunjarrao 
4613e0f65b3SHarish Zunjarrao /* iSCSI specific settings params for iface */
4623e0f65b3SHarish Zunjarrao enum iscsi_iface_param {
4633e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,
4643e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_HDRDGST_EN,
4653e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_DATADGST_EN,
4663e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_IMM_DATA_EN,
4673e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_INITIAL_R2T_EN,
4683e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,
4693e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_PDU_INORDER_EN,
4703e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_ERL,
4713e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,
4723e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_FIRST_BURST,
4733e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_MAX_R2T,
4743e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_MAX_BURST,
4753e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_CHAP_AUTH_EN,
4763e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_BIDI_CHAP_EN,
4773e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,
4783e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,
4793e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,
4803e0f65b3SHarish Zunjarrao 	ISCSI_IFACE_PARAM_INITIATOR_NAME,
48156c155b5SMike Christie };
48256c155b5SMike Christie 
48317fa575eSManish Rangankar enum iscsi_conn_state {
48417fa575eSManish Rangankar 	ISCSI_CONN_STATE_FREE,
48517fa575eSManish Rangankar 	ISCSI_CONN_STATE_XPT_WAIT,
48617fa575eSManish Rangankar 	ISCSI_CONN_STATE_IN_LOGIN,
48717fa575eSManish Rangankar 	ISCSI_CONN_STATE_LOGGED_IN,
48817fa575eSManish Rangankar 	ISCSI_CONN_STATE_IN_LOGOUT,
48917fa575eSManish Rangankar 	ISCSI_CONN_STATE_LOGOUT_REQUESTED,
49017fa575eSManish Rangankar 	ISCSI_CONN_STATE_CLEANUP_WAIT,
49117fa575eSManish Rangankar };
49217fa575eSManish Rangankar 
49343514774SMichael Chan /*
49439e84790SAlex Aizman  * Common error codes
49539e84790SAlex Aizman  */
49639e84790SAlex Aizman enum iscsi_err {
49739e84790SAlex Aizman 	ISCSI_OK			= 0,
49839e84790SAlex Aizman 
49939e84790SAlex Aizman 	ISCSI_ERR_DATASN		= ISCSI_ERR_BASE + 1,
50039e84790SAlex Aizman 	ISCSI_ERR_DATA_OFFSET		= ISCSI_ERR_BASE + 2,
50139e84790SAlex Aizman 	ISCSI_ERR_MAX_CMDSN		= ISCSI_ERR_BASE + 3,
50239e84790SAlex Aizman 	ISCSI_ERR_EXP_CMDSN		= ISCSI_ERR_BASE + 4,
50339e84790SAlex Aizman 	ISCSI_ERR_BAD_OPCODE		= ISCSI_ERR_BASE + 5,
50439e84790SAlex Aizman 	ISCSI_ERR_DATALEN		= ISCSI_ERR_BASE + 6,
50539e84790SAlex Aizman 	ISCSI_ERR_AHSLEN		= ISCSI_ERR_BASE + 7,
50639e84790SAlex Aizman 	ISCSI_ERR_PROTO			= ISCSI_ERR_BASE + 8,
50739e84790SAlex Aizman 	ISCSI_ERR_LUN			= ISCSI_ERR_BASE + 9,
50839e84790SAlex Aizman 	ISCSI_ERR_BAD_ITT		= ISCSI_ERR_BASE + 10,
50939e84790SAlex Aizman 	ISCSI_ERR_CONN_FAILED		= ISCSI_ERR_BASE + 11,
51039e84790SAlex Aizman 	ISCSI_ERR_R2TSN			= ISCSI_ERR_BASE + 12,
51139e84790SAlex Aizman 	ISCSI_ERR_SESSION_FAILED	= ISCSI_ERR_BASE + 13,
51239e84790SAlex Aizman 	ISCSI_ERR_HDR_DGST		= ISCSI_ERR_BASE + 14,
51339e84790SAlex Aizman 	ISCSI_ERR_DATA_DGST		= ISCSI_ERR_BASE + 15,
5147996a778SMike Christie 	ISCSI_ERR_PARAM_NOT_FOUND	= ISCSI_ERR_BASE + 16,
5157996a778SMike Christie 	ISCSI_ERR_NO_SCSI_CMD		= ISCSI_ERR_BASE + 17,
516e5bd7b54SMike Christie 	ISCSI_ERR_INVALID_HOST		= ISCSI_ERR_BASE + 18,
5176f481e3cSMike Christie 	ISCSI_ERR_XMIT_FAILED		= ISCSI_ERR_BASE + 19,
518d1af8a32SMike Christie 	ISCSI_ERR_TCP_CONN_CLOSE	= ISCSI_ERR_BASE + 20,
519df4da5cdSMike Christie 	ISCSI_ERR_SCSI_EH_SESSION_RST	= ISCSI_ERR_BASE + 21,
52009ff742cSMike Christie 	ISCSI_ERR_NOP_TIMEDOUT		= ISCSI_ERR_BASE + 22,
52139e84790SAlex Aizman };
52239e84790SAlex Aizman 
52339e84790SAlex Aizman /*
52439e84790SAlex Aizman  * iSCSI Parameters (RFC3720)
52539e84790SAlex Aizman  */
52639e84790SAlex Aizman enum iscsi_param {
527fd7255f5SMike Christie 	/* passed in using netlink set param */
528fd7255f5SMike Christie 	ISCSI_PARAM_MAX_RECV_DLENGTH,
529fd7255f5SMike Christie 	ISCSI_PARAM_MAX_XMIT_DLENGTH,
530fd7255f5SMike Christie 	ISCSI_PARAM_HDRDGST_EN,
531fd7255f5SMike Christie 	ISCSI_PARAM_DATADGST_EN,
532fd7255f5SMike Christie 	ISCSI_PARAM_INITIAL_R2T_EN,
533fd7255f5SMike Christie 	ISCSI_PARAM_MAX_R2T,
534fd7255f5SMike Christie 	ISCSI_PARAM_IMM_DATA_EN,
535fd7255f5SMike Christie 	ISCSI_PARAM_FIRST_BURST,
536fd7255f5SMike Christie 	ISCSI_PARAM_MAX_BURST,
537fd7255f5SMike Christie 	ISCSI_PARAM_PDU_INORDER_EN,
538fd7255f5SMike Christie 	ISCSI_PARAM_DATASEQ_INORDER_EN,
539fd7255f5SMike Christie 	ISCSI_PARAM_ERL,
540fd7255f5SMike Christie 	ISCSI_PARAM_IFMARKER_EN,
541fd7255f5SMike Christie 	ISCSI_PARAM_OFMARKER_EN,
5428d2860b3SMike Christie 	ISCSI_PARAM_EXP_STATSN,
543fd7255f5SMike Christie 	ISCSI_PARAM_TARGET_NAME,
544fd7255f5SMike Christie 	ISCSI_PARAM_TPGT,
545fd7255f5SMike Christie 	ISCSI_PARAM_PERSISTENT_ADDRESS,
546fd7255f5SMike Christie 	ISCSI_PARAM_PERSISTENT_PORT,
54730a6c652SMike Christie 	ISCSI_PARAM_SESS_RECOVERY_TMO,
548fd7255f5SMike Christie 
54925985edcSLucas De Marchi 	/* passed in through bind conn using transport_fd */
550fd7255f5SMike Christie 	ISCSI_PARAM_CONN_PORT,
551fd7255f5SMike Christie 	ISCSI_PARAM_CONN_ADDRESS,
552fd7255f5SMike Christie 
553b2c64167SMike Christie 	ISCSI_PARAM_USERNAME,
554b2c64167SMike Christie 	ISCSI_PARAM_USERNAME_IN,
555b2c64167SMike Christie 	ISCSI_PARAM_PASSWORD,
556b2c64167SMike Christie 	ISCSI_PARAM_PASSWORD_IN,
557b2c64167SMike Christie 
558843c0a8aSMike Christie 	ISCSI_PARAM_FAST_ABORT,
559f6d5180cSMike Christie 	ISCSI_PARAM_ABORT_TMO,
560f6d5180cSMike Christie 	ISCSI_PARAM_LU_RESET_TMO,
561f6d5180cSMike Christie 	ISCSI_PARAM_HOST_RESET_TMO,
562f6d5180cSMike Christie 
563f6d5180cSMike Christie 	ISCSI_PARAM_PING_TMO,
564f6d5180cSMike Christie 	ISCSI_PARAM_RECV_TMO,
56588dfd340SMike Christie 
56688dfd340SMike Christie 	ISCSI_PARAM_IFACE_NAME,
56788dfd340SMike Christie 	ISCSI_PARAM_ISID,
56888dfd340SMike Christie 	ISCSI_PARAM_INITIATOR_NAME,
5693fe5ae8bSMike Christie 
5703fe5ae8bSMike Christie 	ISCSI_PARAM_TGT_RESET_TMO,
5713b2bef1fSVikas Chaudhary 	ISCSI_PARAM_TARGET_ALIAS,
57230534952SMike Christie 
57330534952SMike Christie 	ISCSI_PARAM_CHAP_IN_IDX,
57430534952SMike Christie 	ISCSI_PARAM_CHAP_OUT_IDX,
5753b9373e9SEddie Wai 
5763b9373e9SEddie Wai 	ISCSI_PARAM_BOOT_ROOT,
5773b9373e9SEddie Wai 	ISCSI_PARAM_BOOT_NIC,
5783b9373e9SEddie Wai 	ISCSI_PARAM_BOOT_TARGET,
5793b9373e9SEddie Wai 
580ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_AUTO_SND_TGT_DISABLE,
581ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DISCOVERY_SESS,
582ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_PORTAL_TYPE,
583ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_CHAP_AUTH_EN,
584ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DISCOVERY_LOGOUT_EN,
585ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_BIDI_CHAP_EN,
586ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DISCOVERY_AUTH_OPTIONAL,
587ae542edbSAdheer Chandravanshi 
588ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DEF_TIME2WAIT,
589ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DEF_TIME2RETAIN,
590ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_MAX_SEGMENT_SIZE,
591ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_STATSN,
592ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_KEEPALIVE_TMO,
593ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_LOCAL_PORT,
594ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TSID,
595ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DEF_TASKMGMT_TMO,
596ae542edbSAdheer Chandravanshi 
597ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_TIMESTAMP_STAT,
598ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_WSF_DISABLE,
599ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_NAGLE_DISABLE,
600ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_TIMER_SCALE,
601ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_TIMESTAMP_EN,
602ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_XMIT_WSF,
603ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_TCP_RECV_WSF,
604ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_IP_FRAGMENT_DISABLE,
605ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_IPV4_TOS,
606ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_IPV6_TC,
607ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_IPV6_FLOW_LABEL,
608ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_IS_FW_ASSIGNED_IPV6,
609ae542edbSAdheer Chandravanshi 
610ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DISCOVERY_PARENT_IDX,
611ae542edbSAdheer Chandravanshi 	ISCSI_PARAM_DISCOVERY_PARENT_TYPE,
6125af62f24SAdheer Chandravanshi 	ISCSI_PARAM_LOCAL_IPADDR,
613fd7255f5SMike Christie 	/* must always be last */
614fd7255f5SMike Christie 	ISCSI_PARAM_MAX,
61539e84790SAlex Aizman };
616fd7255f5SMike Christie 
6171819dc81SMike Christie /* iSCSI HBA params */
6181819dc81SMike Christie enum iscsi_host_param {
6191819dc81SMike Christie 	ISCSI_HOST_PARAM_HWADDRESS,
6208ad5781aSMike Christie 	ISCSI_HOST_PARAM_INITIATOR_NAME,
621d8196ed2SMike Christie 	ISCSI_HOST_PARAM_NETDEV_NAME,
62222236961SMike Christie 	ISCSI_HOST_PARAM_IPADDRESS,
623aeddde29SVikas Chaudhary 	ISCSI_HOST_PARAM_PORT_STATE,
624aeddde29SVikas Chaudhary 	ISCSI_HOST_PARAM_PORT_SPEED,
6251819dc81SMike Christie 	ISCSI_HOST_PARAM_MAX,
6261819dc81SMike Christie };
6271819dc81SMike Christie 
6282902eb49SAdheer Chandravanshi /* portal type */
6292902eb49SAdheer Chandravanshi #define PORTAL_TYPE_IPV4	"ipv4"
6302902eb49SAdheer Chandravanshi #define PORTAL_TYPE_IPV6	"ipv6"
6312902eb49SAdheer Chandravanshi 
632c6a4bb2eSAdheer Chandravanshi /* iSCSI Flash Target params */
633c6a4bb2eSAdheer Chandravanshi enum iscsi_flashnode_param {
634c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IS_FW_ASSIGNED_IPV6,
635c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PORTAL_TYPE,
636c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_AUTO_SND_TGT_DISABLE,
637c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DISCOVERY_SESS,
638c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_ENTRY_EN,
639c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_HDR_DGST_EN,
640c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DATA_DGST_EN,
641c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IMM_DATA_EN,
642c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_INITIAL_R2T_EN,
643c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DATASEQ_INORDER,
644c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PDU_INORDER,
645c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_CHAP_AUTH_EN,
646c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_SNACK_REQ_EN,
647c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DISCOVERY_LOGOUT_EN,
648c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_BIDI_CHAP_EN,
649c6a4bb2eSAdheer Chandravanshi 	/* make authentication for discovery sessions optional */
650c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DISCOVERY_AUTH_OPTIONAL,
651c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_ERL,
652c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_TIMESTAMP_STAT,
653c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_NAGLE_DISABLE,
654c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_WSF_DISABLE,
655c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_TIMER_SCALE,
656c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_TIMESTAMP_EN,
657c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IP_FRAG_DISABLE,
658c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX_RECV_DLENGTH,
659c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX_XMIT_DLENGTH,
660c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_FIRST_BURST,
661c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DEF_TIME2WAIT,
662c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DEF_TIME2RETAIN,
663c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX_R2T,
664c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_KEEPALIVE_TMO,
665c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_ISID,
666c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TSID,
667c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PORT,
668c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX_BURST,
669c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DEF_TASKMGMT_TMO,
670c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IPADDR,
671c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_ALIAS,
672c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_REDIRECT_IPADDR,
673c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX_SEGMENT_SIZE,
674c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_LOCAL_PORT,
675c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IPV4_TOS,
676c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IPV6_TC,
677c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IPV6_FLOW_LABEL,
678c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_NAME,
679c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TPGT,
680c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_LINK_LOCAL_IPV6,
681c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX,
682c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE,
683c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_XMIT_WSF,
684c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_TCP_RECV_WSF,
685c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_CHAP_IN_IDX,
686c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_CHAP_OUT_IDX,
687c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_USERNAME,
688c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_USERNAME_IN,
689c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PASSWORD,
690c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_PASSWORD_IN,
691c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_STATSN,
692c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_EXP_STATSN,
693c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_IS_BOOT_TGT,
694c6a4bb2eSAdheer Chandravanshi 
695c6a4bb2eSAdheer Chandravanshi 	ISCSI_FLASHNODE_MAX,
696c6a4bb2eSAdheer Chandravanshi };
697c6a4bb2eSAdheer Chandravanshi 
698c6a4bb2eSAdheer Chandravanshi struct iscsi_flashnode_param_info {
699c6a4bb2eSAdheer Chandravanshi 	uint32_t len;		/* Actual length of the param */
700c6a4bb2eSAdheer Chandravanshi 	uint16_t param;		/* iscsi param value */
7015febf6d6SGustavo A. R. Silva 	uint8_t value[];	/* length sized value follows */
702c6a4bb2eSAdheer Chandravanshi } __packed;
703c6a4bb2eSAdheer Chandravanshi 
704c6a4bb2eSAdheer Chandravanshi enum iscsi_discovery_parent_type {
705c6a4bb2eSAdheer Chandravanshi 	ISCSI_DISC_PARENT_UNKNOWN	= 0x1,
706c6a4bb2eSAdheer Chandravanshi 	ISCSI_DISC_PARENT_SENDTGT	= 0x2,
707c6a4bb2eSAdheer Chandravanshi 	ISCSI_DISC_PARENT_ISNS		= 0x3,
708c6a4bb2eSAdheer Chandravanshi };
709c6a4bb2eSAdheer Chandravanshi 
710aeddde29SVikas Chaudhary /* iSCSI port Speed */
711aeddde29SVikas Chaudhary enum iscsi_port_speed {
712aeddde29SVikas Chaudhary 	ISCSI_PORT_SPEED_UNKNOWN	= 0x1,
713aeddde29SVikas Chaudhary 	ISCSI_PORT_SPEED_10MBPS		= 0x2,
714aeddde29SVikas Chaudhary 	ISCSI_PORT_SPEED_100MBPS	= 0x4,
715aeddde29SVikas Chaudhary 	ISCSI_PORT_SPEED_1GBPS		= 0x8,
716aeddde29SVikas Chaudhary 	ISCSI_PORT_SPEED_10GBPS		= 0x10,
717f9e4fa46SJitendra Bhivare 	ISCSI_PORT_SPEED_25GBPS         = 0x20,
718f9e4fa46SJitendra Bhivare 	ISCSI_PORT_SPEED_40GBPS         = 0x40,
719aeddde29SVikas Chaudhary };
720aeddde29SVikas Chaudhary 
721aeddde29SVikas Chaudhary /* iSCSI port state */
722aeddde29SVikas Chaudhary enum iscsi_port_state {
723aeddde29SVikas Chaudhary 	ISCSI_PORT_STATE_DOWN		= 0x1,
724aeddde29SVikas Chaudhary 	ISCSI_PORT_STATE_UP		= 0x2,
725aeddde29SVikas Chaudhary };
726aeddde29SVikas Chaudhary 
7271a590cabSVikas Chaudhary /* iSCSI PING status/error code */
7281a590cabSVikas Chaudhary enum iscsi_ping_status_code {
7291a590cabSVikas Chaudhary 	ISCSI_PING_SUCCESS			= 0,
7301a590cabSVikas Chaudhary 	ISCSI_PING_FW_DISABLED			= 0x1,
7311a590cabSVikas Chaudhary 	ISCSI_PING_IPADDR_INVALID		= 0x2,
7321a590cabSVikas Chaudhary 	ISCSI_PING_LINKLOCAL_IPV6_ADDR_INVALID	= 0x3,
7331a590cabSVikas Chaudhary 	ISCSI_PING_TIMEOUT			= 0x4,
7341a590cabSVikas Chaudhary 	ISCSI_PING_INVALID_DEST_ADDR		= 0x5,
7351a590cabSVikas Chaudhary 	ISCSI_PING_OVERSIZE_PACKET		= 0x6,
7361a590cabSVikas Chaudhary 	ISCSI_PING_ICMP_ERROR			= 0x7,
7371a590cabSVikas Chaudhary 	ISCSI_PING_MAX_REQ_EXCEEDED		= 0x8,
7381a590cabSVikas Chaudhary 	ISCSI_PING_NO_ARP_RECEIVED		= 0x9,
7391a590cabSVikas Chaudhary };
7401a590cabSVikas Chaudhary 
74139e84790SAlex Aizman #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
74239e84790SAlex Aizman #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
74339e84790SAlex Aizman 
74439e84790SAlex Aizman /*
74539e84790SAlex Aizman  * These flags presents iSCSI Data-Path capabilities.
74639e84790SAlex Aizman  */
74739e84790SAlex Aizman #define CAP_RECOVERY_L0		0x1
74839e84790SAlex Aizman #define CAP_RECOVERY_L1		0x2
74939e84790SAlex Aizman #define CAP_RECOVERY_L2		0x4
75039e84790SAlex Aizman #define CAP_MULTI_R2T		0x8
75139e84790SAlex Aizman #define CAP_HDRDGST		0x10
75239e84790SAlex Aizman #define CAP_DATADGST		0x20
75339e84790SAlex Aizman #define CAP_MULTI_CONN		0x40
75439e84790SAlex Aizman #define CAP_TEXT_NEGO		0x80
75539e84790SAlex Aizman #define CAP_MARKERS		0x100
7560ab823dbSMike Christie #define CAP_FW_DB		0x200
75763c62f1cSMike Christie #define CAP_SENDTARGETS_OFFLOAD	0x400	/* offload discovery process */
75863c62f1cSMike Christie #define CAP_DATA_PATH_OFFLOAD	0x800	/* offload entire IO path */
75963c62f1cSMike Christie #define CAP_DIGEST_OFFLOAD	0x1000	/* offload hdr and data digests */
7606df19a79SMike Christie #define CAP_PADDING_OFFLOAD	0x2000	/* offload padding insertion, removal,
7616df19a79SMike Christie 					 and verification */
76217fa575eSManish Rangankar #define CAP_LOGIN_OFFLOAD	0x4000  /* offload session login */
76339e84790SAlex Aizman 
76439e84790SAlex Aizman /*
76539e84790SAlex Aizman  * These flags describes reason of stop_conn() call
76639e84790SAlex Aizman  */
76739e84790SAlex Aizman #define STOP_CONN_TERM		0x1
76839e84790SAlex Aizman #define STOP_CONN_SUSPEND	0x2
76939e84790SAlex Aizman #define STOP_CONN_RECOVER	0x3
77039e84790SAlex Aizman 
77139e84790SAlex Aizman #define ISCSI_STATS_CUSTOM_MAX		32
77239e84790SAlex Aizman #define ISCSI_STATS_CUSTOM_DESC_MAX	64
77339e84790SAlex Aizman struct iscsi_stats_custom {
77439e84790SAlex Aizman 	char desc[ISCSI_STATS_CUSTOM_DESC_MAX];
77539e84790SAlex Aizman 	uint64_t value;
77639e84790SAlex Aizman };
77739e84790SAlex Aizman 
77839e84790SAlex Aizman /*
77939e84790SAlex Aizman  * struct iscsi_stats - iSCSI Statistics (iSCSI MIB)
78039e84790SAlex Aizman  *
78139e84790SAlex Aizman  * Note: this structure contains counters collected on per-connection basis.
78239e84790SAlex Aizman  */
78339e84790SAlex Aizman struct iscsi_stats {
78439e84790SAlex Aizman 	/* octets */
78539e84790SAlex Aizman 	uint64_t txdata_octets;
78639e84790SAlex Aizman 	uint64_t rxdata_octets;
78739e84790SAlex Aizman 
78839e84790SAlex Aizman 	/* xmit pdus */
78939e84790SAlex Aizman 	uint32_t noptx_pdus;
79039e84790SAlex Aizman 	uint32_t scsicmd_pdus;
79139e84790SAlex Aizman 	uint32_t tmfcmd_pdus;
79239e84790SAlex Aizman 	uint32_t login_pdus;
79339e84790SAlex Aizman 	uint32_t text_pdus;
79439e84790SAlex Aizman 	uint32_t dataout_pdus;
79539e84790SAlex Aizman 	uint32_t logout_pdus;
79639e84790SAlex Aizman 	uint32_t snack_pdus;
79739e84790SAlex Aizman 
79839e84790SAlex Aizman 	/* recv pdus */
79939e84790SAlex Aizman 	uint32_t noprx_pdus;
80039e84790SAlex Aizman 	uint32_t scsirsp_pdus;
80139e84790SAlex Aizman 	uint32_t tmfrsp_pdus;
80239e84790SAlex Aizman 	uint32_t textrsp_pdus;
80339e84790SAlex Aizman 	uint32_t datain_pdus;
80439e84790SAlex Aizman 	uint32_t logoutrsp_pdus;
80539e84790SAlex Aizman 	uint32_t r2t_pdus;
80639e84790SAlex Aizman 	uint32_t async_pdus;
80739e84790SAlex Aizman 	uint32_t rjt_pdus;
80839e84790SAlex Aizman 
80939e84790SAlex Aizman 	/* errors */
81039e84790SAlex Aizman 	uint32_t digest_err;
81139e84790SAlex Aizman 	uint32_t timeout_err;
81239e84790SAlex Aizman 
81339e84790SAlex Aizman 	/*
81439e84790SAlex Aizman 	 * iSCSI Custom Statistics support, i.e. Transport could
81539e84790SAlex Aizman 	 * extend existing MIB statistics with its own specific statistics
81639e84790SAlex Aizman 	 * up to ISCSI_STATS_CUSTOM_MAX
81739e84790SAlex Aizman 	 */
81839e84790SAlex Aizman 	uint32_t custom_length;
8195febf6d6SGustavo A. R. Silva 	struct iscsi_stats_custom custom[]
82039e84790SAlex Aizman 		__attribute__ ((aligned (sizeof(uint64_t))));
82139e84790SAlex Aizman };
82239e84790SAlex Aizman 
8236260a5d2SNilesh Javali enum chap_type_e {
8246260a5d2SNilesh Javali 	CHAP_TYPE_OUT,
8256260a5d2SNilesh Javali 	CHAP_TYPE_IN,
8266260a5d2SNilesh Javali };
8276260a5d2SNilesh Javali 
8283af142feSAdheer Chandravanshi enum iscsi_chap_param {
8293af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM_INDEX,
8303af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM_CHAP_TYPE,
8313af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM_USERNAME,
8323af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM_PASSWORD,
8333af142feSAdheer Chandravanshi 	ISCSI_CHAP_PARAM_PASSWORD_LEN
8343af142feSAdheer Chandravanshi };
8353af142feSAdheer Chandravanshi 
8366260a5d2SNilesh Javali #define ISCSI_CHAP_AUTH_NAME_MAX_LEN	256
8376260a5d2SNilesh Javali #define ISCSI_CHAP_AUTH_SECRET_MAX_LEN	256
8386260a5d2SNilesh Javali struct iscsi_chap_rec {
8396260a5d2SNilesh Javali 	uint16_t chap_tbl_idx;
8406260a5d2SNilesh Javali 	enum chap_type_e chap_type;
8416260a5d2SNilesh Javali 	char username[ISCSI_CHAP_AUTH_NAME_MAX_LEN];
8426260a5d2SNilesh Javali 	uint8_t password[ISCSI_CHAP_AUTH_SECRET_MAX_LEN];
8436260a5d2SNilesh Javali 	uint8_t password_length;
8445a5a15f2SVikas Chaudhary };
8456260a5d2SNilesh Javali 
8466fa7c554SLalit Chandivade #define ISCSI_HOST_STATS_CUSTOM_MAX             32
8476fa7c554SLalit Chandivade #define ISCSI_HOST_STATS_CUSTOM_DESC_MAX        64
8486fa7c554SLalit Chandivade struct iscsi_host_stats_custom {
8496fa7c554SLalit Chandivade 	char desc[ISCSI_HOST_STATS_CUSTOM_DESC_MAX];
8506fa7c554SLalit Chandivade 	uint64_t value;
8516fa7c554SLalit Chandivade };
8526fa7c554SLalit Chandivade 
8536fa7c554SLalit Chandivade /* struct iscsi_offload_host_stats: Host statistics,
8546fa7c554SLalit Chandivade  * Include statistics for MAC, IP, TCP & iSCSI.
8556fa7c554SLalit Chandivade  */
8566fa7c554SLalit Chandivade struct iscsi_offload_host_stats {
8576fa7c554SLalit Chandivade 	/* MAC */
8586fa7c554SLalit Chandivade 	uint64_t mactx_frames;
8596fa7c554SLalit Chandivade 	uint64_t mactx_bytes;
8606fa7c554SLalit Chandivade 	uint64_t mactx_multicast_frames;
8616fa7c554SLalit Chandivade 	uint64_t mactx_broadcast_frames;
8626fa7c554SLalit Chandivade 	uint64_t mactx_pause_frames;
8636fa7c554SLalit Chandivade 	uint64_t mactx_control_frames;
8646fa7c554SLalit Chandivade 	uint64_t mactx_deferral;
8656fa7c554SLalit Chandivade 	uint64_t mactx_excess_deferral;
8666fa7c554SLalit Chandivade 	uint64_t mactx_late_collision;
8676fa7c554SLalit Chandivade 	uint64_t mactx_abort;
8686fa7c554SLalit Chandivade 	uint64_t mactx_single_collision;
8696fa7c554SLalit Chandivade 	uint64_t mactx_multiple_collision;
8706fa7c554SLalit Chandivade 	uint64_t mactx_collision;
8716fa7c554SLalit Chandivade 	uint64_t mactx_frames_dropped;
8726fa7c554SLalit Chandivade 	uint64_t mactx_jumbo_frames;
8736fa7c554SLalit Chandivade 	uint64_t macrx_frames;
8746fa7c554SLalit Chandivade 	uint64_t macrx_bytes;
8756fa7c554SLalit Chandivade 	uint64_t macrx_unknown_control_frames;
8766fa7c554SLalit Chandivade 	uint64_t macrx_pause_frames;
8776fa7c554SLalit Chandivade 	uint64_t macrx_control_frames;
8786fa7c554SLalit Chandivade 	uint64_t macrx_dribble;
8796fa7c554SLalit Chandivade 	uint64_t macrx_frame_length_error;
8806fa7c554SLalit Chandivade 	uint64_t macrx_jabber;
8816fa7c554SLalit Chandivade 	uint64_t macrx_carrier_sense_error;
8826fa7c554SLalit Chandivade 	uint64_t macrx_frame_discarded;
8836fa7c554SLalit Chandivade 	uint64_t macrx_frames_dropped;
8846fa7c554SLalit Chandivade 	uint64_t mac_crc_error;
8856fa7c554SLalit Chandivade 	uint64_t mac_encoding_error;
8866fa7c554SLalit Chandivade 	uint64_t macrx_length_error_large;
8876fa7c554SLalit Chandivade 	uint64_t macrx_length_error_small;
8886fa7c554SLalit Chandivade 	uint64_t macrx_multicast_frames;
8896fa7c554SLalit Chandivade 	uint64_t macrx_broadcast_frames;
8906fa7c554SLalit Chandivade 	/* IP */
8916fa7c554SLalit Chandivade 	uint64_t iptx_packets;
8926fa7c554SLalit Chandivade 	uint64_t iptx_bytes;
8936fa7c554SLalit Chandivade 	uint64_t iptx_fragments;
8946fa7c554SLalit Chandivade 	uint64_t iprx_packets;
8956fa7c554SLalit Chandivade 	uint64_t iprx_bytes;
8966fa7c554SLalit Chandivade 	uint64_t iprx_fragments;
8976fa7c554SLalit Chandivade 	uint64_t ip_datagram_reassembly;
8986fa7c554SLalit Chandivade 	uint64_t ip_invalid_address_error;
8996fa7c554SLalit Chandivade 	uint64_t ip_error_packets;
9006fa7c554SLalit Chandivade 	uint64_t ip_fragrx_overlap;
9016fa7c554SLalit Chandivade 	uint64_t ip_fragrx_outoforder;
9026fa7c554SLalit Chandivade 	uint64_t ip_datagram_reassembly_timeout;
9036fa7c554SLalit Chandivade 	uint64_t ipv6tx_packets;
9046fa7c554SLalit Chandivade 	uint64_t ipv6tx_bytes;
9056fa7c554SLalit Chandivade 	uint64_t ipv6tx_fragments;
9066fa7c554SLalit Chandivade 	uint64_t ipv6rx_packets;
9076fa7c554SLalit Chandivade 	uint64_t ipv6rx_bytes;
9086fa7c554SLalit Chandivade 	uint64_t ipv6rx_fragments;
9096fa7c554SLalit Chandivade 	uint64_t ipv6_datagram_reassembly;
9106fa7c554SLalit Chandivade 	uint64_t ipv6_invalid_address_error;
9116fa7c554SLalit Chandivade 	uint64_t ipv6_error_packets;
9126fa7c554SLalit Chandivade 	uint64_t ipv6_fragrx_overlap;
9136fa7c554SLalit Chandivade 	uint64_t ipv6_fragrx_outoforder;
9146fa7c554SLalit Chandivade 	uint64_t ipv6_datagram_reassembly_timeout;
9156fa7c554SLalit Chandivade 	/* TCP */
9166fa7c554SLalit Chandivade 	uint64_t tcptx_segments;
9176fa7c554SLalit Chandivade 	uint64_t tcptx_bytes;
9186fa7c554SLalit Chandivade 	uint64_t tcprx_segments;
9196fa7c554SLalit Chandivade 	uint64_t tcprx_byte;
9206fa7c554SLalit Chandivade 	uint64_t tcp_duplicate_ack_retx;
9216fa7c554SLalit Chandivade 	uint64_t tcp_retx_timer_expired;
9226fa7c554SLalit Chandivade 	uint64_t tcprx_duplicate_ack;
9236fa7c554SLalit Chandivade 	uint64_t tcprx_pure_ackr;
9246fa7c554SLalit Chandivade 	uint64_t tcptx_delayed_ack;
9256fa7c554SLalit Chandivade 	uint64_t tcptx_pure_ack;
9266fa7c554SLalit Chandivade 	uint64_t tcprx_segment_error;
9276fa7c554SLalit Chandivade 	uint64_t tcprx_segment_outoforder;
9286fa7c554SLalit Chandivade 	uint64_t tcprx_window_probe;
9296fa7c554SLalit Chandivade 	uint64_t tcprx_window_update;
9306fa7c554SLalit Chandivade 	uint64_t tcptx_window_probe_persist;
9316fa7c554SLalit Chandivade 	/* ECC */
9326fa7c554SLalit Chandivade 	uint64_t ecc_error_correction;
9336fa7c554SLalit Chandivade 	/* iSCSI */
9346fa7c554SLalit Chandivade 	uint64_t iscsi_pdu_tx;
9356fa7c554SLalit Chandivade 	uint64_t iscsi_data_bytes_tx;
9366fa7c554SLalit Chandivade 	uint64_t iscsi_pdu_rx;
9376fa7c554SLalit Chandivade 	uint64_t iscsi_data_bytes_rx;
9386fa7c554SLalit Chandivade 	uint64_t iscsi_io_completed;
9396fa7c554SLalit Chandivade 	uint64_t iscsi_unexpected_io_rx;
9406fa7c554SLalit Chandivade 	uint64_t iscsi_format_error;
9416fa7c554SLalit Chandivade 	uint64_t iscsi_hdr_digest_error;
9426fa7c554SLalit Chandivade 	uint64_t iscsi_data_digest_error;
9436fa7c554SLalit Chandivade 	uint64_t iscsi_sequence_error;
9446fa7c554SLalit Chandivade 	/*
9456fa7c554SLalit Chandivade 	 * iSCSI Custom Host Statistics support, i.e. Transport could
9466fa7c554SLalit Chandivade 	 * extend existing host statistics with its own specific statistics
9476fa7c554SLalit Chandivade 	 * up to ISCSI_HOST_STATS_CUSTOM_MAX
9486fa7c554SLalit Chandivade 	 */
9496fa7c554SLalit Chandivade 	uint32_t custom_length;
9505febf6d6SGustavo A. R. Silva 	struct iscsi_host_stats_custom custom[]
9516fa7c554SLalit Chandivade 		__aligned(sizeof(uint64_t));
9526fa7c554SLalit Chandivade };
9536fa7c554SLalit Chandivade 
95439e84790SAlex Aizman #endif
955