iscsi_ioctl.h revision 1.3 1 1.3 dsl /* $NetBSD: iscsi_ioctl.h,v 1.3 2013/04/04 22:17:13 dsl Exp $ */
2 1.1 agc
3 1.1 agc /*-
4 1.1 agc * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc.
5 1.1 agc * All rights reserved.
6 1.1 agc *
7 1.1 agc * This code is derived from software contributed to The NetBSD Foundation
8 1.1 agc * by Wasabi Systems, Inc.
9 1.1 agc *
10 1.1 agc * Redistribution and use in source and binary forms, with or without
11 1.1 agc * modification, are permitted provided that the following conditions
12 1.1 agc * are met:
13 1.1 agc * 1. Redistributions of source code must retain the above copyright
14 1.1 agc * notice, this list of conditions and the following disclaimer.
15 1.1 agc * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 agc * notice, this list of conditions and the following disclaimer in the
17 1.1 agc * documentation and/or other materials provided with the distribution.
18 1.1 agc *
19 1.1 agc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 agc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 agc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 agc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 agc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 agc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 agc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 agc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 agc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 agc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 agc * POSSIBILITY OF SUCH DAMAGE.
30 1.1 agc */
31 1.1 agc #ifndef _ISCSI_IOCTL_H
32 1.1 agc #define _ISCSI_IOCTL_H
33 1.1 agc
34 1.1 agc #include <dev/iscsi/iscsi.h>
35 1.3 dsl #include <sys/scsiio.h>
36 1.1 agc
37 1.1 agc /* ================== Interface Structures ======================== */
38 1.1 agc
39 1.1 agc /* ===== Login, add_connection, and restore_connection ===== */
40 1.1 agc
41 1.1 agc typedef struct {
42 1.1 agc uint32_t status;
43 1.1 agc int socket;
44 1.1 agc struct {
45 1.2 christos unsigned int HeaderDigest:1;
46 1.2 christos unsigned int DataDigest:1;
47 1.2 christos unsigned int MaxConnections:1;
48 1.2 christos unsigned int DefaultTime2Wait:1;
49 1.2 christos unsigned int DefaultTime2Retain:1;
50 1.2 christos unsigned int MaxRecvDataSegmentLength:1;
51 1.2 christos unsigned int auth_info:1;
52 1.2 christos unsigned int user_name:1;
53 1.2 christos unsigned int password:1;
54 1.2 christos unsigned int target_password:1;
55 1.2 christos unsigned int TargetName:1;
56 1.2 christos unsigned int TargetAlias:1;
57 1.2 christos unsigned int ErrorRecoveryLevel:1;
58 1.1 agc } is_present;
59 1.1 agc iscsi_auth_info_t auth_info;
60 1.1 agc iscsi_login_session_type_t login_type;
61 1.1 agc iscsi_digest_t HeaderDigest;
62 1.1 agc iscsi_digest_t DataDigest;
63 1.1 agc uint32_t session_id;
64 1.1 agc uint32_t connection_id;
65 1.1 agc uint32_t MaxRecvDataSegmentLength;
66 1.1 agc uint16_t MaxConnections;
67 1.1 agc uint16_t DefaultTime2Wait;
68 1.1 agc uint16_t DefaultTime2Retain;
69 1.1 agc uint16_t ErrorRecoveryLevel;
70 1.1 agc void *user_name;
71 1.1 agc void *password;
72 1.1 agc void *target_password;
73 1.1 agc void *TargetName;
74 1.1 agc void *TargetAlias;
75 1.1 agc } iscsi_login_parameters_t;
76 1.1 agc
77 1.1 agc /*
78 1.1 agc status
79 1.1 agc Contains, on return, the result of the command.
80 1.1 agc socket
81 1.1 agc A handle to the open TCP connection to the target portal.
82 1.1 agc is_present
83 1.1 agc Contains a bitfield that indicates which members of the
84 1.1 agc iscsi_login_parameters structure contain valid data.
85 1.1 agc auth_info
86 1.1 agc Is a bitfield of parameters for authorization.
87 1.1 agc The members are
88 1.1 agc mutual_auth Indicates that authentication should be mutual, i.e.
89 1.1 agc the initiator should authenticate the target, and the target
90 1.1 agc should authenticate the initiator. If not specified, the target
91 1.1 agc will authenticate the initiator only.
92 1.1 agc is_secure Indicates that the connection is secure.
93 1.1 agc auth_number Indicates the number of elements in auth_type.
94 1.1 agc When 0, no authentication will be used.
95 1.1 agc auth_type
96 1.1 agc Contains up to ISCSI_AUTH_OPTIONS enumerator values of type
97 1.1 agc iscsi_auth_types that indicates the authentication method that should
98 1.1 agc be used to establish a login connection (none, CHAP, KRB5, etc.), in
99 1.1 agc order of priority. The first element is the most preferred method, the
100 1.1 agc last element the least preferred.
101 1.1 agc login_type
102 1.1 agc Contains an enumerator value of type login_session_type that indicates
103 1.1 agc the type of logon session (discovery, informational, or full featured).
104 1.1 agc HeaderDigest
105 1.1 agc Indicates which digest (if any) to use for the PDU header.
106 1.1 agc DataDigest
107 1.1 agc Indicates which digest (if any) to use for the PDU data.
108 1.1 agc session_id
109 1.1 agc Login: OUT: Receives an integer that identifies the session.
110 1.1 agc Add_connection, Restore_connection: IN: Session ID.
111 1.1 agc connection_id
112 1.1 agc Login, Add_connection: OUT: Receives an integer that identifies the
113 1.1 agc connection.
114 1.1 agc Restore_connection: IN: Connection ID.
115 1.1 agc MaxRecvDataSegmentLength
116 1.1 agc Allows limiting or extending the maximum receive data segment length.
117 1.1 agc Must contain a value between 512 and 2**24-1 if specified.
118 1.1 agc MaxConnections
119 1.1 agc Contains a value between 1 and 65535 that specifies the maximum number
120 1.1 agc of connections to target devices that can be associated with a single
121 1.1 agc logon session. A value of 0 indicates that there no limit to the
122 1.1 agc number of connections.
123 1.1 agc DefaultTime2Wait
124 1.1 agc Specifies the minimum time to wait, in seconds, before attempting to
125 1.1 agc reconnect or reassign a connection that has been dropped.
126 1.1 agc The default is 2.
127 1.1 agc DefaultTime2Retain
128 1.1 agc Specifies the maximum time, in seconds, allowed to reassign a
129 1.1 agc connection after the initial wait indicated in DefaultTime2Retain has
130 1.1 agc elapsed. The default is 20.
131 1.1 agc ErrorRecoveryLevel
132 1.1 agc Specifies the desired error recovery level for the session.
133 1.1 agc The default and maximum is 2.
134 1.1 agc user_name
135 1.1 agc Sets the user (or CHAP) name to use during login authentication of the
136 1.1 agc initiator (zero terminated UTF-8 string). Default is initiator name.
137 1.1 agc password
138 1.1 agc Contains the password to use during login authentication of the
139 1.1 agc initiator (zero terminated UTF-8 string). Required if authentication
140 1.1 agc is requested.
141 1.1 agc target_password
142 1.1 agc Contains the password to use during login authentication of the target
143 1.1 agc (zero terminated UTF-8 string). Required if mutual authentication is
144 1.1 agc requested.
145 1.1 agc TargetName
146 1.1 agc Indicates the name of the target with which to establish the logon
147 1.1 agc session (zero terminated UTF-8 string).
148 1.1 agc TargetAlias
149 1.1 agc Receives the target alias as a zero terminated UTF-8 string. When
150 1.1 agc present, the buffer must be of size ISCSI_STRING_LENGTH.
151 1.1 agc */
152 1.1 agc
153 1.1 agc
154 1.1 agc /* ===== Logout ===== */
155 1.1 agc
156 1.1 agc typedef struct {
157 1.1 agc uint32_t status;
158 1.1 agc uint32_t session_id;
159 1.1 agc } iscsi_logout_parameters_t;
160 1.1 agc
161 1.1 agc /*
162 1.1 agc status
163 1.1 agc Contains, on return, the result of the command.
164 1.1 agc session_id
165 1.1 agc Contains an integer that identifies the session.
166 1.1 agc */
167 1.1 agc
168 1.1 agc /* ===== remove_connection ===== */
169 1.1 agc
170 1.1 agc typedef struct {
171 1.1 agc uint32_t status;
172 1.1 agc uint32_t session_id;
173 1.1 agc uint32_t connection_id;
174 1.1 agc } iscsi_remove_parameters_t;
175 1.1 agc
176 1.1 agc /*
177 1.1 agc status
178 1.1 agc Contains, on return, the result of the command.
179 1.1 agc session_id
180 1.1 agc Contains an integer that identifies the session.
181 1.1 agc connection_id
182 1.1 agc Contains an integer that identifies the connection.
183 1.1 agc */
184 1.1 agc
185 1.1 agc /* ===== connection status ===== */
186 1.1 agc
187 1.1 agc typedef struct {
188 1.1 agc uint32_t status;
189 1.1 agc uint32_t session_id;
190 1.1 agc uint32_t connection_id;
191 1.1 agc } iscsi_conn_status_parameters_t;
192 1.1 agc
193 1.1 agc /*
194 1.1 agc status
195 1.1 agc Contains, on return, the result of the command.
196 1.1 agc session_id
197 1.1 agc Contains an integer that identifies the session.
198 1.1 agc connection_id
199 1.1 agc Contains an integer that identifies the connection.
200 1.1 agc */
201 1.1 agc
202 1.1 agc /* ===== io_command ===== */
203 1.1 agc
204 1.1 agc typedef struct {
205 1.1 agc uint32_t status;
206 1.1 agc uint32_t session_id;
207 1.1 agc uint32_t connection_id;
208 1.1 agc struct {
209 1.2 christos unsigned int immediate:1;
210 1.1 agc } options;
211 1.1 agc uint64_t lun;
212 1.1 agc scsireq_t req;
213 1.1 agc } iscsi_iocommand_parameters_t;
214 1.1 agc
215 1.1 agc /*
216 1.1 agc status
217 1.1 agc Contains, on return, the result of the command (an ISCSI_STATUS code).
218 1.1 agc lun
219 1.1 agc Indicates which of the target's logical units should provide the data.
220 1.1 agc session_id
221 1.1 agc Contains an integer that identifies the session.
222 1.1 agc connection_id
223 1.1 agc Contains an integer that identifies the connection.
224 1.1 agc This parameter is optional and should only be used for test purposes.
225 1.1 agc options
226 1.1 agc A bitfield indicating options for the command.
227 1.1 agc The members are
228 1.1 agc immediate Indicates that the command should be sent
229 1.1 agc immediately, ahead of any queued requests.
230 1.1 agc
231 1.1 agc req
232 1.1 agc Contains the parameters for the request as defined in sys/scsiio.h
233 1.1 agc typedef struct scsireq {
234 1.1 agc u_long flags;
235 1.1 agc u_long timeout;
236 1.1 agc uint8_t cmd[16];
237 1.1 agc uint8_t cmdlen;
238 1.1 agc void * databuf;
239 1.1 agc u_long datalen;
240 1.1 agc u_long datalen_used;
241 1.1 agc uint8_t sense[SENSEBUFLEN];
242 1.1 agc uint8_t senselen;
243 1.1 agc uint8_t senselen_used;
244 1.1 agc uint8_t status;
245 1.1 agc uint8_t retsts;
246 1.1 agc int error;
247 1.1 agc } scsireq_t;
248 1.1 agc
249 1.1 agc flags
250 1.1 agc Indicates request status and type.
251 1.1 agc timeout
252 1.1 agc Indicates a timeout value (reserved).
253 1.1 agc cmd
254 1.1 agc SCSI command buffer.
255 1.1 agc cmdlen
256 1.1 agc Length of SCSI command in cmd.
257 1.1 agc databuf
258 1.1 agc Pointer to user-space buffer that holds the data
259 1.1 agc read or written by the SCSI command.
260 1.1 agc datalen
261 1.1 agc Indicates the size in bytes of the buffer at databuf.
262 1.1 agc datalen_used
263 1.1 agc Returns the number of bytes actually read or written.
264 1.1 agc sense
265 1.1 agc Sense data buffer.
266 1.1 agc senselen
267 1.1 agc Indicates the requested size of sense data. Must not exceed
268 1.1 agc SENSEBUFLEN (48).
269 1.1 agc senselen_used
270 1.1 agc Contains, on return, the number of bytes written to sense.
271 1.1 agc status
272 1.1 agc Contains, on return, the original SCSI status (reserved).
273 1.1 agc retsts
274 1.1 agc Contains, on return, the status of the command as defined in scsiio.h.
275 1.1 agc error
276 1.1 agc Contains, on return, the original SCSI error bits (reserved).
277 1.1 agc */
278 1.1 agc
279 1.1 agc
280 1.1 agc /* ===== send_targets ===== */
281 1.1 agc
282 1.1 agc typedef struct {
283 1.1 agc uint32_t status;
284 1.1 agc uint32_t session_id;
285 1.1 agc void *response_buffer;
286 1.1 agc uint32_t response_size;
287 1.1 agc uint32_t response_used;
288 1.1 agc uint32_t response_total;
289 1.1 agc uint8_t key[ISCSI_STRING_LENGTH];
290 1.1 agc } iscsi_send_targets_parameters_t;
291 1.1 agc
292 1.1 agc /*
293 1.1 agc status
294 1.1 agc Contains, on return, the result of the command.
295 1.1 agc session_id
296 1.1 agc Contains an integer that identifies the session.
297 1.1 agc response_buffer
298 1.1 agc User mode address of buffer to hold the response data retrieved by
299 1.1 agc the iSCSI send targets command.
300 1.1 agc response_size
301 1.1 agc Contains, on input, the size in bytes of the buffer at
302 1.1 agc response_buffer. If this is 0, the command will execute the
303 1.1 agc SendTargets request, and return (in response_total) the number of
304 1.1 agc bytes required.
305 1.1 agc response_used
306 1.1 agc Contains, on return, the number of bytes actually retrieved to
307 1.1 agc response_buffer.
308 1.1 agc response_total
309 1.1 agc Contains, on return, the total number of bytes required to hold the
310 1.1 agc complete list of targets. This may be larger than response_size.
311 1.1 agc key
312 1.1 agc Specifies the SendTargets key value ("All", <target name>, or empty).
313 1.1 agc */
314 1.1 agc
315 1.1 agc /* ===== set_node_name ===== */
316 1.1 agc
317 1.1 agc typedef struct {
318 1.1 agc uint32_t status;
319 1.1 agc uint8_t InitiatorName[ISCSI_STRING_LENGTH];
320 1.1 agc uint8_t InitiatorAlias[ISCSI_STRING_LENGTH];
321 1.1 agc uint8_t ISID[6];
322 1.1 agc } iscsi_set_node_name_parameters_t;
323 1.1 agc
324 1.1 agc /*
325 1.1 agc status
326 1.1 agc Contains, on return, the result of the command.
327 1.1 agc InitiatorName
328 1.1 agc Specifies the InitiatorName used during login. Required.
329 1.1 agc InitiatorAlias
330 1.1 agc Specifies the InitiatorAlias for use during login. May be empty.
331 1.1 agc ISID
332 1.1 agc Specifies the ISID (a 6 byte binary value) for use during login.
333 1.1 agc May be zero (all bytes) for the initiator to use a default value.
334 1.1 agc */
335 1.1 agc
336 1.1 agc /* ===== register_event and deregister_event ===== */
337 1.1 agc
338 1.1 agc typedef struct {
339 1.1 agc uint32_t status;
340 1.1 agc uint32_t event_id;
341 1.1 agc } iscsi_register_event_parameters_t;
342 1.1 agc
343 1.1 agc /*
344 1.1 agc status
345 1.1 agc Contains, on return, the result of the command.
346 1.1 agc event_id
347 1.1 agc Returns driver-assigned event ID to be used in
348 1.1 agc subsequent calls to wait_event and deregister_event.
349 1.1 agc */
350 1.1 agc
351 1.1 agc /* ===== wait_event ===== */
352 1.1 agc
353 1.1 agc typedef enum {
354 1.1 agc ISCSI_SESSION_TERMINATED = 1,
355 1.1 agc ISCSI_CONNECTION_TERMINATED,
356 1.1 agc ISCSI_RECOVER_CONNECTION,
357 1.1 agc ISCSI_DRIVER_TERMINATING
358 1.1 agc } iscsi_event_t;
359 1.1 agc
360 1.1 agc /*
361 1.1 agc Driver Events
362 1.1 agc
363 1.1 agc ISCSI_SESSION_TERMINATED
364 1.1 agc The specified session (including all of its associated connections)
365 1.1 agc has been terminated.
366 1.1 agc ISCSI_CONNECTION_TERMINATED
367 1.1 agc The specified connection has been terminated.
368 1.1 agc ISCSI_RECOVER_CONNECTION
369 1.1 agc The application should attempt to recover the given connection.
370 1.1 agc ISCSI_DRIVER_TERMINATING
371 1.1 agc The driver is unloading.
372 1.1 agc The application MUST call ISCSI_DEREGISTER_EVENT as soon as possible
373 1.1 agc after receiving this event. After performing the deregister IOCTL,
374 1.1 agc the application must no longer attempt to access the driver.
375 1.1 agc */
376 1.1 agc
377 1.1 agc
378 1.1 agc typedef struct {
379 1.1 agc uint32_t status;
380 1.1 agc uint32_t event_id;
381 1.1 agc iscsi_event_t event_kind;
382 1.1 agc uint32_t session_id;
383 1.1 agc uint32_t connection_id;
384 1.1 agc uint32_t reason;
385 1.1 agc } iscsi_wait_event_parameters_t;
386 1.1 agc
387 1.1 agc /*
388 1.1 agc status
389 1.1 agc Contains, on return, the result of the command.
390 1.1 agc event_id
391 1.1 agc Driver assigned event ID.
392 1.1 agc event_kind
393 1.1 agc Identifies the event.
394 1.1 agc session_id
395 1.1 agc Identifies the affected session (0 for DRIVER_TERMINATING).
396 1.1 agc connection_id
397 1.1 agc Identifies the affected connection (0 for DRIVER_TERMINATING).
398 1.1 agc reason
399 1.1 agc Identifies the termination reason (ISCSI status code).
400 1.1 agc */
401 1.1 agc
402 1.1 agc typedef struct {
403 1.1 agc uint32_t status;
404 1.1 agc uint16_t interface_version;
405 1.1 agc uint16_t major;
406 1.1 agc uint16_t minor;
407 1.1 agc uint8_t version_string[ISCSI_STRING_LENGTH];
408 1.1 agc } iscsi_get_version_parameters_t;
409 1.1 agc
410 1.1 agc /*
411 1.1 agc status
412 1.1 agc Contains, on return, the result of the command.
413 1.1 agc interface_version
414 1.1 agc Updated when interface changes. Current Version is 2.
415 1.1 agc major
416 1.1 agc Major version number.
417 1.1 agc minor
418 1.1 agc Minor version number.
419 1.1 agc version_string
420 1.1 agc Displayable version string (zero terminated).
421 1.1 agc */
422 1.1 agc
423 1.1 agc /* ========================= IOCTL Codes =========================== */
424 1.1 agc
425 1.1 agc #define ISCSI_GET_VERSION _IOWR(0, 1, iscsi_get_version_parameters_t)
426 1.1 agc #define ISCSI_LOGIN _IOWR(0, 2, iscsi_login_parameters_t)
427 1.1 agc #define ISCSI_LOGOUT _IOWR(0, 3, iscsi_logout_parameters_t)
428 1.1 agc #define ISCSI_ADD_CONNECTION _IOWR(0, 4, iscsi_login_parameters_t)
429 1.1 agc #define ISCSI_RESTORE_CONNECTION _IOWR(0, 5, iscsi_login_parameters_t)
430 1.1 agc #define ISCSI_REMOVE_CONNECTION _IOWR(0, 6, iscsi_remove_parameters_t)
431 1.1 agc #define ISCSI_CONNECTION_STATUS _IOWR(0, 7, iscsi_conn_status_parameters_t)
432 1.1 agc #define ISCSI_SEND_TARGETS _IOWR(0, 8, iscsi_send_targets_parameters_t)
433 1.1 agc #define ISCSI_SET_NODE_NAME _IOWR(0, 9, iscsi_set_node_name_parameters_t)
434 1.1 agc #define ISCSI_IO_COMMAND _IOWR(0, 10, iscsi_iocommand_parameters_t)
435 1.1 agc #define ISCSI_REGISTER_EVENT _IOWR(0, 11, iscsi_register_event_parameters_t)
436 1.1 agc #define ISCSI_DEREGISTER_EVENT _IOWR(0, 12, iscsi_register_event_parameters_t)
437 1.1 agc #define ISCSI_WAIT_EVENT _IOWR(0, 13, iscsi_wait_event_parameters_t)
438 1.1 agc #define ISCSI_POLL_EVENT _IOWR(0, 14, iscsi_wait_event_parameters_t)
439 1.1 agc
440 1.1 agc #endif /* !_ISCSI_IOCTL_H */
441