Blame view

include/scsi/iscsi_if.h 12.9 KB
39e84790d   Alex Aizman   [SCSI] open-iscsi...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  /*
   * iSCSI User/Kernel Shares (Defines, Constants, Protocol definitions, etc)
   *
   * Copyright (C) 2005 Dmitry Yusupov
   * Copyright (C) 2005 Alex Aizman
   * maintained by open-iscsi@googlegroups.com
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published
   * by the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful, but
   * WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * General Public License for more details.
   *
   * See the file COPYING included with this distribution for more details.
   */
  
  #ifndef ISCSI_IF_H
  #define ISCSI_IF_H
  
  #include <scsi/iscsi_proto.h>
43514774f   Michael Chan   [SCSI] iscsi clas...
25
26
27
28
29
  #include <linux/in.h>
  #include <linux/in6.h>
  
  #define ISCSI_NL_GRP_ISCSID	1
  #define ISCSI_NL_GRP_UIP	2
39e84790d   Alex Aizman   [SCSI] open-iscsi...
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  
  #define UEVENT_BASE			10
  #define KEVENT_BASE			100
  #define ISCSI_ERR_BASE			1000
  
  enum iscsi_uevent_e {
  	ISCSI_UEVENT_UNKNOWN		= 0,
  
  	/* down events */
  	ISCSI_UEVENT_CREATE_SESSION	= UEVENT_BASE + 1,
  	ISCSI_UEVENT_DESTROY_SESSION	= UEVENT_BASE + 2,
  	ISCSI_UEVENT_CREATE_CONN	= UEVENT_BASE + 3,
  	ISCSI_UEVENT_DESTROY_CONN	= UEVENT_BASE + 4,
  	ISCSI_UEVENT_BIND_CONN		= UEVENT_BASE + 5,
  	ISCSI_UEVENT_SET_PARAM		= UEVENT_BASE + 6,
  	ISCSI_UEVENT_START_CONN		= UEVENT_BASE + 7,
  	ISCSI_UEVENT_STOP_CONN		= UEVENT_BASE + 8,
  	ISCSI_UEVENT_SEND_PDU		= UEVENT_BASE + 9,
  	ISCSI_UEVENT_GET_STATS		= UEVENT_BASE + 10,
  	ISCSI_UEVENT_GET_PARAM		= UEVENT_BASE + 11,
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
50
51
52
  	ISCSI_UEVENT_TRANSPORT_EP_CONNECT	= UEVENT_BASE + 12,
  	ISCSI_UEVENT_TRANSPORT_EP_POLL		= UEVENT_BASE + 13,
  	ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT	= UEVENT_BASE + 14,
01cb225da   Mike Christie   [SCSI] iscsi: add...
53
  	ISCSI_UEVENT_TGT_DSCVR		= UEVENT_BASE + 15,
1d9bf13a9   Mike Christie   [SCSI] iscsi clas...
54
  	ISCSI_UEVENT_SET_HOST_PARAM	= UEVENT_BASE + 16,
269747890   Mike Christie   [SCSI] libiscsi: ...
55
  	ISCSI_UEVENT_UNBIND_SESSION	= UEVENT_BASE + 17,
10eb0f013   Mike Christie   [SCSI] iscsi: pas...
56
57
  	ISCSI_UEVENT_CREATE_BOUND_SESSION		= UEVENT_BASE + 18,
  	ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST	= UEVENT_BASE + 19,
01cb225da   Mike Christie   [SCSI] iscsi: add...
58

43514774f   Michael Chan   [SCSI] iscsi clas...
59
  	ISCSI_UEVENT_PATH_UPDATE	= UEVENT_BASE + 20,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
60
61
62
63
  	/* up events */
  	ISCSI_KEVENT_RECV_PDU		= KEVENT_BASE + 1,
  	ISCSI_KEVENT_CONN_ERROR		= KEVENT_BASE + 2,
  	ISCSI_KEVENT_IF_ERROR		= KEVENT_BASE + 3,
53cb8a1f4   Mike Christie   [SCSI] iscsi: add...
64
  	ISCSI_KEVENT_DESTROY_SESSION	= KEVENT_BASE + 4,
269747890   Mike Christie   [SCSI] libiscsi: ...
65
66
  	ISCSI_KEVENT_UNBIND_SESSION	= KEVENT_BASE + 5,
  	ISCSI_KEVENT_CREATE_SESSION	= KEVENT_BASE + 6,
43514774f   Michael Chan   [SCSI] iscsi clas...
67
68
69
  
  	ISCSI_KEVENT_PATH_REQ		= KEVENT_BASE + 7,
  	ISCSI_KEVENT_IF_DOWN		= KEVENT_BASE + 8,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
70
  };
01cb225da   Mike Christie   [SCSI] iscsi: add...
71
72
73
74
75
  enum iscsi_tgt_dscvr {
  	ISCSI_TGT_DSCVR_SEND_TARGETS	= 1,
  	ISCSI_TGT_DSCVR_ISNS		= 2,
  	ISCSI_TGT_DSCVR_SLP		= 3,
  };
39e84790d   Alex Aizman   [SCSI] open-iscsi...
76
77
78
79
80
81
82
83
84
  struct iscsi_uevent {
  	uint32_t type; /* k/u events type */
  	uint32_t iferror; /* carries interface or resource errors */
  	uint64_t transport_handle;
  
  	union {
  		/* messages u -> k */
  		struct msg_create_session {
  			uint32_t	initial_cmdsn;
1548271ec   Mike Christie   [SCSI] libiscsi: ...
85
86
  			uint16_t	cmds_max;
  			uint16_t	queue_depth;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
87
  		} c_session;
40753caa3   Mike Christie   [SCSI] iscsi clas...
88
  		struct msg_create_bound_session {
d82ff9be7   Mike Christie   [SCSI] iscsi clas...
89
  			uint64_t	ep_handle;
40753caa3   Mike Christie   [SCSI] iscsi clas...
90
91
92
93
  			uint32_t	initial_cmdsn;
  			uint16_t	cmds_max;
  			uint16_t	queue_depth;
  		} c_bound_session;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
94
  		struct msg_destroy_session {
39e84790d   Alex Aizman   [SCSI] open-iscsi...
95
96
97
  			uint32_t	sid;
  		} d_session;
  		struct msg_create_conn {
39e84790d   Alex Aizman   [SCSI] open-iscsi...
98
  			uint32_t	sid;
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
99
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
100
101
  		} c_conn;
  		struct msg_bind_conn {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
102
103
  			uint32_t	sid;
  			uint32_t	cid;
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
104
  			uint64_t	transport_eph;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
105
106
107
  			uint32_t	is_leading;
  		} b_conn;
  		struct msg_destroy_conn {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
108
  			uint32_t	sid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
109
110
111
  			uint32_t	cid;
  		} d_conn;
  		struct msg_send_pdu {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
112
113
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
114
115
  			uint32_t	hdr_size;
  			uint32_t	data_size;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
116
117
  		} send_pdu;
  		struct msg_set_param {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
118
119
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
120
  			uint32_t	param; /* enum iscsi_param */
fd7255f51   Mike Christie   [SCSI] iscsi: add...
121
  			uint32_t	len;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
122
123
  		} set_param;
  		struct msg_start_conn {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
124
125
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
126
127
  		} start_conn;
  		struct msg_stop_conn {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
128
129
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
130
131
132
133
  			uint64_t	conn_handle;
  			uint32_t	flag;
  		} stop_conn;
  		struct msg_get_stats {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
134
135
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
136
  		} get_stats;
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
137
138
139
  		struct msg_transport_connect {
  			uint32_t	non_blocking;
  		} ep_connect;
10eb0f013   Mike Christie   [SCSI] iscsi: pas...
140
141
142
143
  		struct msg_transport_connect_through_host {
  			uint32_t	host_no;
  			uint32_t	non_blocking;
  		} ep_connect_through_host;
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
144
145
146
147
148
149
150
  		struct msg_transport_poll {
  			uint64_t	ep_handle;
  			uint32_t	timeout_ms;
  		} ep_poll;
  		struct msg_transport_disconnect {
  			uint64_t	ep_handle;
  		} ep_disconnect;
01cb225da   Mike Christie   [SCSI] iscsi: add...
151
152
153
154
155
156
157
158
159
160
161
  		struct msg_tgt_dscvr {
  			enum iscsi_tgt_dscvr	type;
  			uint32_t	host_no;
  			/*
   			 * enable = 1 to establish a new connection
  			 * with the server. enable = 0 to disconnect
  			 * from the server. Used primarily to switch
  			 * from one iSNS server to another.
  			 */
  			uint32_t	enable;
  		} tgt_dscvr;
1d9bf13a9   Mike Christie   [SCSI] iscsi clas...
162
163
164
165
166
  		struct msg_set_host_param {
  			uint32_t	host_no;
  			uint32_t	param; /* enum iscsi_host_param */
  			uint32_t	len;
  		} set_host_param;
43514774f   Michael Chan   [SCSI] iscsi clas...
167
168
169
  		struct msg_set_path {
  			uint32_t	host_no;
  		} set_path;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
170
171
172
  	} u;
  	union {
  		/* messages k -> u */
39e84790d   Alex Aizman   [SCSI] open-iscsi...
173
174
  		int			retcode;
  		struct msg_create_session_ret {
39e84790d   Alex Aizman   [SCSI] open-iscsi...
175
  			uint32_t	sid;
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
176
  			uint32_t	host_no;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
177
  		} c_session_ret;
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
178
179
180
181
  		struct msg_create_conn_ret {
  			uint32_t	sid;
  			uint32_t	cid;
  		} c_conn_ret;
269747890   Mike Christie   [SCSI] libiscsi: ...
182
183
184
185
  		struct msg_unbind_session {
  			uint32_t	sid;
  			uint32_t	host_no;
  		} unbind_session;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
186
  		struct msg_recv_req {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
187
188
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
189
  			uint64_t	recv_handle;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
190
191
  		} recv_req;
  		struct msg_conn_error {
b5c7a12dc   Mike Christie   [SCSI] iscsi: rm ...
192
193
  			uint32_t	sid;
  			uint32_t	cid;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
194
195
  			uint32_t	error; /* enum iscsi_err */
  		} connerror;
53cb8a1f4   Mike Christie   [SCSI] iscsi: add...
196
197
198
199
  		struct msg_session_destroyed {
  			uint32_t	host_no;
  			uint32_t	sid;
  		} d_session;
264faaaa1   Or Gerlitz   [SCSI] iscsi: add...
200
201
202
  		struct msg_transport_connect_ret {
  			uint64_t	handle;
  		} ep_connect_ret;
43514774f   Michael Chan   [SCSI] iscsi clas...
203
204
205
206
207
208
  		struct msg_req_path {
  			uint32_t	host_no;
  		} req_path;
  		struct msg_notify_if_down {
  			uint32_t	host_no;
  		} notify_if_down;
39e84790d   Alex Aizman   [SCSI] open-iscsi...
209
210
211
212
  	} r;
  } __attribute__ ((aligned (sizeof(uint64_t))));
  
  /*
43514774f   Michael Chan   [SCSI] iscsi clas...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
   * To keep the struct iscsi_uevent size the same for userspace code
   * compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and
   * ISCSI_KEVENT_PATH_REQ is defined separately and comes after the
   * struct iscsi_uevent in the NETLINK_ISCSI message.
   */
  struct iscsi_path {
  	uint64_t	handle;
  	uint8_t		mac_addr[6];
  	uint8_t		mac_addr_old[6];
  	uint32_t	ip_addr_len;	/* 4 or 16 */
  	union {
  		struct in_addr	v4_addr;
  		struct in6_addr	v6_addr;
  	} src;
  	union {
  		struct in_addr	v4_addr;
  		struct in6_addr	v6_addr;
  	} dst;
  	uint16_t	vlan_id;
  	uint16_t	pmtu;
  } __attribute__ ((aligned (sizeof(uint64_t))));
  
  /*
39e84790d   Alex Aizman   [SCSI] open-iscsi...
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
   * Common error codes
   */
  enum iscsi_err {
  	ISCSI_OK			= 0,
  
  	ISCSI_ERR_DATASN		= ISCSI_ERR_BASE + 1,
  	ISCSI_ERR_DATA_OFFSET		= ISCSI_ERR_BASE + 2,
  	ISCSI_ERR_MAX_CMDSN		= ISCSI_ERR_BASE + 3,
  	ISCSI_ERR_EXP_CMDSN		= ISCSI_ERR_BASE + 4,
  	ISCSI_ERR_BAD_OPCODE		= ISCSI_ERR_BASE + 5,
  	ISCSI_ERR_DATALEN		= ISCSI_ERR_BASE + 6,
  	ISCSI_ERR_AHSLEN		= ISCSI_ERR_BASE + 7,
  	ISCSI_ERR_PROTO			= ISCSI_ERR_BASE + 8,
  	ISCSI_ERR_LUN			= ISCSI_ERR_BASE + 9,
  	ISCSI_ERR_BAD_ITT		= ISCSI_ERR_BASE + 10,
  	ISCSI_ERR_CONN_FAILED		= ISCSI_ERR_BASE + 11,
  	ISCSI_ERR_R2TSN			= ISCSI_ERR_BASE + 12,
  	ISCSI_ERR_SESSION_FAILED	= ISCSI_ERR_BASE + 13,
  	ISCSI_ERR_HDR_DGST		= ISCSI_ERR_BASE + 14,
  	ISCSI_ERR_DATA_DGST		= ISCSI_ERR_BASE + 15,
7996a778f   Mike Christie   [SCSI] iscsi: add...
256
257
  	ISCSI_ERR_PARAM_NOT_FOUND	= ISCSI_ERR_BASE + 16,
  	ISCSI_ERR_NO_SCSI_CMD		= ISCSI_ERR_BASE + 17,
e5bd7b54e   Mike Christie   [SCSI] libiscsi: ...
258
  	ISCSI_ERR_INVALID_HOST		= ISCSI_ERR_BASE + 18,
6f481e3ce   Mike Christie   [SCSI] iscsi_tcp:...
259
  	ISCSI_ERR_XMIT_FAILED		= ISCSI_ERR_BASE + 19,
d1af8a328   Mike Christie   [SCSI] iscsi_tcp:...
260
  	ISCSI_ERR_TCP_CONN_CLOSE	= ISCSI_ERR_BASE + 20,
df4da5cdf   Mike Christie   [SCSI] libiscsi: ...
261
  	ISCSI_ERR_SCSI_EH_SESSION_RST	= ISCSI_ERR_BASE + 21,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
262
263
264
265
266
267
  };
  
  /*
   * iSCSI Parameters (RFC3720)
   */
  enum iscsi_param {
fd7255f51   Mike Christie   [SCSI] iscsi: add...
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
  	/* passed in using netlink set param */
  	ISCSI_PARAM_MAX_RECV_DLENGTH,
  	ISCSI_PARAM_MAX_XMIT_DLENGTH,
  	ISCSI_PARAM_HDRDGST_EN,
  	ISCSI_PARAM_DATADGST_EN,
  	ISCSI_PARAM_INITIAL_R2T_EN,
  	ISCSI_PARAM_MAX_R2T,
  	ISCSI_PARAM_IMM_DATA_EN,
  	ISCSI_PARAM_FIRST_BURST,
  	ISCSI_PARAM_MAX_BURST,
  	ISCSI_PARAM_PDU_INORDER_EN,
  	ISCSI_PARAM_DATASEQ_INORDER_EN,
  	ISCSI_PARAM_ERL,
  	ISCSI_PARAM_IFMARKER_EN,
  	ISCSI_PARAM_OFMARKER_EN,
8d2860b3c   Mike Christie   [SCSI] iscsi: inc...
283
  	ISCSI_PARAM_EXP_STATSN,
fd7255f51   Mike Christie   [SCSI] iscsi: add...
284
285
286
287
  	ISCSI_PARAM_TARGET_NAME,
  	ISCSI_PARAM_TPGT,
  	ISCSI_PARAM_PERSISTENT_ADDRESS,
  	ISCSI_PARAM_PERSISTENT_PORT,
30a6c6523   Mike Christie   [SCSI] iscsi: fix...
288
  	ISCSI_PARAM_SESS_RECOVERY_TMO,
fd7255f51   Mike Christie   [SCSI] iscsi: add...
289

25985edce   Lucas De Marchi   Fix common misspe...
290
  	/* passed in through bind conn using transport_fd */
fd7255f51   Mike Christie   [SCSI] iscsi: add...
291
292
  	ISCSI_PARAM_CONN_PORT,
  	ISCSI_PARAM_CONN_ADDRESS,
b2c641673   Mike Christie   [SCSI] iscsi clas...
293
294
295
296
  	ISCSI_PARAM_USERNAME,
  	ISCSI_PARAM_USERNAME_IN,
  	ISCSI_PARAM_PASSWORD,
  	ISCSI_PARAM_PASSWORD_IN,
843c0a8a7   Mike Christie   [SCSI] libiscsi, ...
297
  	ISCSI_PARAM_FAST_ABORT,
f6d5180c7   Mike Christie   [SCSI] libiscsi: ...
298
299
300
301
302
303
  	ISCSI_PARAM_ABORT_TMO,
  	ISCSI_PARAM_LU_RESET_TMO,
  	ISCSI_PARAM_HOST_RESET_TMO,
  
  	ISCSI_PARAM_PING_TMO,
  	ISCSI_PARAM_RECV_TMO,
88dfd340b   Mike Christie   [SCSI] iscsi clas...
304
305
306
307
  
  	ISCSI_PARAM_IFACE_NAME,
  	ISCSI_PARAM_ISID,
  	ISCSI_PARAM_INITIATOR_NAME,
3fe5ae8b4   Mike Christie   [SCSI] libiscsi: ...
308
309
  
  	ISCSI_PARAM_TGT_RESET_TMO,
3b2bef1fc   Vikas Chaudhary   [SCSI] iscsi_tran...
310
  	ISCSI_PARAM_TARGET_ALIAS,
fd7255f51   Mike Christie   [SCSI] iscsi: add...
311
312
  	/* must always be last */
  	ISCSI_PARAM_MAX,
39e84790d   Alex Aizman   [SCSI] open-iscsi...
313
  };
fd7255f51   Mike Christie   [SCSI] iscsi: add...
314

88dfd340b   Mike Christie   [SCSI] iscsi clas...
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
  #define ISCSI_MAX_RECV_DLENGTH		(1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH)
  #define ISCSI_MAX_XMIT_DLENGTH		(1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH)
  #define ISCSI_HDRDGST_EN		(1ULL << ISCSI_PARAM_HDRDGST_EN)
  #define ISCSI_DATADGST_EN		(1ULL << ISCSI_PARAM_DATADGST_EN)
  #define ISCSI_INITIAL_R2T_EN		(1ULL << ISCSI_PARAM_INITIAL_R2T_EN)
  #define ISCSI_MAX_R2T			(1ULL << ISCSI_PARAM_MAX_R2T)
  #define ISCSI_IMM_DATA_EN		(1ULL << ISCSI_PARAM_IMM_DATA_EN)
  #define ISCSI_FIRST_BURST		(1ULL << ISCSI_PARAM_FIRST_BURST)
  #define ISCSI_MAX_BURST			(1ULL << ISCSI_PARAM_MAX_BURST)
  #define ISCSI_PDU_INORDER_EN		(1ULL << ISCSI_PARAM_PDU_INORDER_EN)
  #define ISCSI_DATASEQ_INORDER_EN	(1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN)
  #define ISCSI_ERL			(1ULL << ISCSI_PARAM_ERL)
  #define ISCSI_IFMARKER_EN		(1ULL << ISCSI_PARAM_IFMARKER_EN)
  #define ISCSI_OFMARKER_EN		(1ULL << ISCSI_PARAM_OFMARKER_EN)
  #define ISCSI_EXP_STATSN		(1ULL << ISCSI_PARAM_EXP_STATSN)
  #define ISCSI_TARGET_NAME		(1ULL << ISCSI_PARAM_TARGET_NAME)
  #define ISCSI_TPGT			(1ULL << ISCSI_PARAM_TPGT)
  #define ISCSI_PERSISTENT_ADDRESS	(1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS)
  #define ISCSI_PERSISTENT_PORT		(1ULL << ISCSI_PARAM_PERSISTENT_PORT)
  #define ISCSI_SESS_RECOVERY_TMO		(1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO)
  #define ISCSI_CONN_PORT			(1ULL << ISCSI_PARAM_CONN_PORT)
  #define ISCSI_CONN_ADDRESS		(1ULL << ISCSI_PARAM_CONN_ADDRESS)
  #define ISCSI_USERNAME			(1ULL << ISCSI_PARAM_USERNAME)
  #define ISCSI_USERNAME_IN		(1ULL << ISCSI_PARAM_USERNAME_IN)
  #define ISCSI_PASSWORD			(1ULL << ISCSI_PARAM_PASSWORD)
  #define ISCSI_PASSWORD_IN		(1ULL << ISCSI_PARAM_PASSWORD_IN)
  #define ISCSI_FAST_ABORT		(1ULL << ISCSI_PARAM_FAST_ABORT)
  #define ISCSI_ABORT_TMO			(1ULL << ISCSI_PARAM_ABORT_TMO)
  #define ISCSI_LU_RESET_TMO		(1ULL << ISCSI_PARAM_LU_RESET_TMO)
  #define ISCSI_HOST_RESET_TMO		(1ULL << ISCSI_PARAM_HOST_RESET_TMO)
  #define ISCSI_PING_TMO			(1ULL << ISCSI_PARAM_PING_TMO)
  #define ISCSI_RECV_TMO			(1ULL << ISCSI_PARAM_RECV_TMO)
  #define ISCSI_IFACE_NAME		(1ULL << ISCSI_PARAM_IFACE_NAME)
  #define ISCSI_ISID			(1ULL << ISCSI_PARAM_ISID)
  #define ISCSI_INITIATOR_NAME		(1ULL << ISCSI_PARAM_INITIATOR_NAME)
3fe5ae8b4   Mike Christie   [SCSI] libiscsi: ...
350
  #define ISCSI_TGT_RESET_TMO		(1ULL << ISCSI_PARAM_TGT_RESET_TMO)
3b2bef1fc   Vikas Chaudhary   [SCSI] iscsi_tran...
351
  #define ISCSI_TARGET_ALIAS		(1ULL << ISCSI_PARAM_TARGET_ALIAS)
39e84790d   Alex Aizman   [SCSI] open-iscsi...
352

1819dc814   Mike Christie   [SCSI] iscsi_tran...
353
354
355
  /* iSCSI HBA params */
  enum iscsi_host_param {
  	ISCSI_HOST_PARAM_HWADDRESS,
8ad5781ae   Mike Christie   [SCSI] iscsi clas...
356
  	ISCSI_HOST_PARAM_INITIATOR_NAME,
d8196ed21   Mike Christie   [SCSI] iscsi clas...
357
  	ISCSI_HOST_PARAM_NETDEV_NAME,
222369619   Mike Christie   [SCSI] iscsi clas...
358
  	ISCSI_HOST_PARAM_IPADDRESS,
1819dc814   Mike Christie   [SCSI] iscsi_tran...
359
360
  	ISCSI_HOST_PARAM_MAX,
  };
88dfd340b   Mike Christie   [SCSI] iscsi clas...
361
362
363
364
  #define ISCSI_HOST_HWADDRESS		(1ULL << ISCSI_HOST_PARAM_HWADDRESS)
  #define ISCSI_HOST_INITIATOR_NAME	(1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME)
  #define ISCSI_HOST_NETDEV_NAME		(1ULL << ISCSI_HOST_PARAM_NETDEV_NAME)
  #define ISCSI_HOST_IPADDRESS		(1ULL << ISCSI_HOST_PARAM_IPADDRESS)
1819dc814   Mike Christie   [SCSI] iscsi_tran...
365

39e84790d   Alex Aizman   [SCSI] open-iscsi...
366
367
  #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
  #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
39e84790d   Alex Aizman   [SCSI] open-iscsi...
368
369
370
371
372
373
374
375
376
377
378
379
380
  
  /*
   * These flags presents iSCSI Data-Path capabilities.
   */
  #define CAP_RECOVERY_L0		0x1
  #define CAP_RECOVERY_L1		0x2
  #define CAP_RECOVERY_L2		0x4
  #define CAP_MULTI_R2T		0x8
  #define CAP_HDRDGST		0x10
  #define CAP_DATADGST		0x20
  #define CAP_MULTI_CONN		0x40
  #define CAP_TEXT_NEGO		0x80
  #define CAP_MARKERS		0x100
0ab823db8   Mike Christie   [SCSI] qla4xxx: a...
381
  #define CAP_FW_DB		0x200
63c62f1cb   Mike Christie   [SCSI] iscsi_tcp:...
382
383
384
  #define CAP_SENDTARGETS_OFFLOAD	0x400	/* offload discovery process */
  #define CAP_DATA_PATH_OFFLOAD	0x800	/* offload entire IO path */
  #define CAP_DIGEST_OFFLOAD	0x1000	/* offload hdr and data digests */
6df19a791   Mike Christie   [SCSI] libiscsi_t...
385
386
  #define CAP_PADDING_OFFLOAD	0x2000	/* offload padding insertion, removal,
  					 and verification */
39e84790d   Alex Aizman   [SCSI] open-iscsi...
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
  
  /*
   * These flags describes reason of stop_conn() call
   */
  #define STOP_CONN_TERM		0x1
  #define STOP_CONN_SUSPEND	0x2
  #define STOP_CONN_RECOVER	0x3
  
  #define ISCSI_STATS_CUSTOM_MAX		32
  #define ISCSI_STATS_CUSTOM_DESC_MAX	64
  struct iscsi_stats_custom {
  	char desc[ISCSI_STATS_CUSTOM_DESC_MAX];
  	uint64_t value;
  };
  
  /*
   * struct iscsi_stats - iSCSI Statistics (iSCSI MIB)
   *
   * Note: this structure contains counters collected on per-connection basis.
   */
  struct iscsi_stats {
  	/* octets */
  	uint64_t txdata_octets;
  	uint64_t rxdata_octets;
  
  	/* xmit pdus */
  	uint32_t noptx_pdus;
  	uint32_t scsicmd_pdus;
  	uint32_t tmfcmd_pdus;
  	uint32_t login_pdus;
  	uint32_t text_pdus;
  	uint32_t dataout_pdus;
  	uint32_t logout_pdus;
  	uint32_t snack_pdus;
  
  	/* recv pdus */
  	uint32_t noprx_pdus;
  	uint32_t scsirsp_pdus;
  	uint32_t tmfrsp_pdus;
  	uint32_t textrsp_pdus;
  	uint32_t datain_pdus;
  	uint32_t logoutrsp_pdus;
  	uint32_t r2t_pdus;
  	uint32_t async_pdus;
  	uint32_t rjt_pdus;
  
  	/* errors */
  	uint32_t digest_err;
  	uint32_t timeout_err;
  
  	/*
  	 * iSCSI Custom Statistics support, i.e. Transport could
  	 * extend existing MIB statistics with its own specific statistics
  	 * up to ISCSI_STATS_CUSTOM_MAX
  	 */
  	uint32_t custom_length;
  	struct iscsi_stats_custom custom[0]
  		__attribute__ ((aligned (sizeof(uint64_t))));
  };
  
  #endif