iscsid.h revision 1.2 1 1.2 christos /* $NetBSD: iscsid.h,v 1.2 2011/10/29 16:54:49 christos Exp $ */
2 1.1 agc
3 1.1 agc /*-
4 1.1 agc * Copyright (c) 2004,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 _ISCSID_H_
32 1.1 agc #define _ISCSID_H_
33 1.1 agc
34 1.1 agc #include <dev/iscsi/iscsi.h>
35 1.1 agc
36 1.1 agc #ifndef __BEGIN_DECLS
37 1.1 agc # if defined(__cplusplus)
38 1.1 agc # define __BEGIN_DECLS extern "C" {
39 1.1 agc # define __END_DECLS }
40 1.1 agc # else
41 1.1 agc # define __BEGIN_DECLS
42 1.1 agc # define __END_DECLS
43 1.1 agc # endif
44 1.1 agc #endif
45 1.1 agc
46 1.1 agc __BEGIN_DECLS
47 1.1 agc
48 1.1 agc /* The socket name */
49 1.1 agc
50 1.1 agc #define ISCSID_SOCK_NAME "/tmp/iscsid_socket"
51 1.1 agc
52 1.1 agc
53 1.1 agc /* ==== Requests ==== */
54 1.1 agc
55 1.1 agc #define ISCSID_ADD_TARGET 1
56 1.1 agc #define ISCSID_ADD_PORTAL 2
57 1.1 agc #define ISCSID_SET_TARGET_OPTIONS 3
58 1.1 agc #define ISCSID_GET_TARGET_OPTIONS 4
59 1.1 agc #define ISCSID_SET_TARGET_AUTHENTICATION 5
60 1.1 agc #define ISCSID_SLP_FIND_TARGETS 6
61 1.1 agc #define ISCSID_REFRESH_TARGETS 7
62 1.1 agc #define ISCSID_REMOVE_TARGET 8
63 1.1 agc #define ISCSID_SEARCH_LIST 9
64 1.1 agc #define ISCSID_GET_LIST 10
65 1.1 agc #define ISCSID_GET_TARGET_INFO 11
66 1.1 agc #define ISCSID_GET_PORTAL_INFO 12
67 1.1 agc #define ISCSID_ADD_ISNS_SERVER 13
68 1.1 agc #define ISCSID_GET_ISNS_SERVER 14
69 1.1 agc #define ISCSID_SLP_FIND_ISNS_SERVERS 15
70 1.1 agc #define ISCSID_REMOVE_ISNS_SERVER 17
71 1.1 agc #define ISCSID_ADD_INITIATOR_PORTAL 18
72 1.1 agc #define ISCSID_GET_INITIATOR_PORTAL 19
73 1.1 agc #define ISCSID_REMOVE_INITIATOR_PORTAL 20
74 1.1 agc #define ISCSID_LOGIN 21
75 1.1 agc #define ISCSID_ADD_CONNECTION 22
76 1.1 agc #define ISCSID_LOGOUT 23
77 1.1 agc #define ISCSID_REMOVE_CONNECTION 24
78 1.1 agc #define ISCSID_GET_SESSION_LIST 25
79 1.1 agc #define ISCSID_GET_CONNECTION_LIST 26
80 1.1 agc #define ISCSID_GET_CONNECTION_INFO 27
81 1.1 agc #define ISCSID_SET_NODE_NAME 28
82 1.1 agc
83 1.1 agc #define ISCSID_GET_VERSION 100
84 1.1 agc
85 1.1 agc #define ISCSID_DAEMON_TEST 900
86 1.1 agc #define ISCSID_DAEMON_TERMINATE 999
87 1.1 agc
88 1.1 agc /* ==== List kind used in some requests ==== */
89 1.1 agc
90 1.1 agc typedef enum {
91 1.1 agc TARGET_LIST, /* list of targets */
92 1.1 agc PORTAL_LIST, /* list of target portals */
93 1.1 agc SEND_TARGETS_LIST, /* list of send targets portals */
94 1.1 agc ISNS_LIST, /* list of isns servers */
95 1.1 agc SESSION_LIST, /* list of sessions */
96 1.1 agc INITIATOR_LIST, /* list of initiator portals */
97 1.1 agc NUM_DAEMON_LISTS /* Number of lists the daemon keeps */
98 1.1 agc } iscsid_list_kind_t;
99 1.1 agc
100 1.1 agc /* ==== Search kind for search_list request ==== */
101 1.1 agc
102 1.1 agc typedef enum {
103 1.1 agc FIND_ID, /* search for numeric ID */
104 1.1 agc FIND_NAME, /* search for symbolic name */
105 1.1 agc FIND_TARGET_NAME, /* search for target or initiator name */
106 1.1 agc FIND_ADDRESS /* search for target or server address */
107 1.1 agc } iscsid_search_kind_t;
108 1.1 agc
109 1.1 agc /* ==== Symbolic or numeric ID ==== */
110 1.1 agc
111 1.1 agc typedef struct {
112 1.2 christos uint32_t id;
113 1.1 agc uint8_t name[ISCSI_STRING_LENGTH];
114 1.1 agc } iscsid_sym_id_t;
115 1.1 agc
116 1.1 agc /*
117 1.1 agc id
118 1.1 agc Numeric ID.
119 1.1 agc name
120 1.1 agc Symbolic ID. Ignored if numeric ID is nonzero.
121 1.1 agc */
122 1.1 agc
123 1.1 agc /* ==== Symbolic/Numeric ID with list kind ==== */
124 1.1 agc
125 1.1 agc typedef struct {
126 1.1 agc iscsid_list_kind_t list_kind;
127 1.1 agc iscsid_sym_id_t id;
128 1.1 agc } iscsid_list_id_t;
129 1.1 agc
130 1.1 agc /*
131 1.1 agc list_kind
132 1.1 agc Which list (generally TARGET_LIST or SEND_TARGETS_LIST)
133 1.1 agc id
134 1.1 agc numeric/symbolic ID
135 1.1 agc */
136 1.1 agc
137 1.1 agc
138 1.1 agc typedef struct {
139 1.1 agc struct {
140 1.2 christos unsigned int HeaderDigest:1;
141 1.2 christos unsigned int DataDigest:1;
142 1.2 christos unsigned int MaxRecvDataSegmentLength:1;
143 1.1 agc } is_present;
144 1.1 agc iscsi_digest_t HeaderDigest;
145 1.1 agc iscsi_digest_t DataDigest;
146 1.1 agc uint32_t MaxRecvDataSegmentLength;
147 1.1 agc } iscsid_portal_options_t;
148 1.1 agc
149 1.1 agc /*
150 1.1 agc is_present
151 1.1 agc Contains a bitfield that indicates which members of the structure
152 1.1 agc contain valid data.
153 1.1 agc HeaderDigest
154 1.1 agc Indicates the digest to use for PDU headers.
155 1.1 agc DataDigest
156 1.1 agc Indicates the digest to use for PDU data.
157 1.1 agc MaxRecvDataSegmentLength
158 1.1 agc Allows limiting or extending the maximum receive data segment length.
159 1.1 agc Must contain a value between 512 and 2**24-1 if specified.
160 1.1 agc */
161 1.1 agc
162 1.1 agc
163 1.1 agc /* ==== General request structure ==== */
164 1.1 agc
165 1.1 agc typedef struct {
166 1.1 agc uint32_t request;
167 1.1 agc uint32_t parameter_length;
168 1.1 agc uint8_t parameter[0];
169 1.1 agc } iscsid_request_t;
170 1.1 agc
171 1.1 agc /*
172 1.1 agc request
173 1.1 agc Is the request ID.
174 1.1 agc parameter_length
175 1.1 agc Specifies the size in bytes of the parameter structure contained in
176 1.1 agc parameter.
177 1.1 agc parameter
178 1.1 agc Contains a structure defining the parameters for the request.
179 1.1 agc */
180 1.1 agc
181 1.1 agc
182 1.1 agc /* ==== General response structure ==== */
183 1.1 agc
184 1.1 agc typedef struct {
185 1.1 agc uint32_t status;
186 1.1 agc uint32_t parameter_length;
187 1.1 agc uint8_t parameter[0];
188 1.1 agc } iscsid_response_t;
189 1.1 agc
190 1.1 agc /*
191 1.1 agc status
192 1.1 agc Is the result of the request.
193 1.1 agc parameter_length
194 1.1 agc Specifies the size in bytes of the parameter structure contained in
195 1.1 agc parameter.
196 1.1 agc parameter
197 1.1 agc Contains a structure defining the parameters for the response.
198 1.1 agc */
199 1.1 agc
200 1.1 agc /* ==== ADD_TARGET ==== */
201 1.1 agc
202 1.1 agc /* Request */
203 1.1 agc
204 1.1 agc typedef struct {
205 1.1 agc iscsid_list_kind_t list_kind;
206 1.1 agc uint8_t sym_name[ISCSI_STRING_LENGTH];
207 1.1 agc uint8_t TargetName[ISCSI_STRING_LENGTH];
208 1.1 agc uint32_t num_portals;
209 1.1 agc iscsi_portal_address_t portal[0];
210 1.1 agc } iscsid_add_target_req_t;
211 1.1 agc
212 1.1 agc /*
213 1.1 agc list_kind
214 1.1 agc Kind of target list (TARGET_LIST or SEND_TARGETS_LIST)
215 1.1 agc sym_name
216 1.1 agc Symbolic name of the target (optional)
217 1.1 agc TargetName
218 1.1 agc Indicates the name of the target (zero terminated UTF-8 string).
219 1.1 agc num_portals
220 1.1 agc Number of portal addresses (may be zero).
221 1.1 agc portal
222 1.1 agc Array of portals for this target.
223 1.1 agc */
224 1.1 agc
225 1.1 agc typedef struct {
226 1.1 agc uint32_t target_id;
227 1.1 agc uint32_t num_portals;
228 1.1 agc uint32_t portal_id[0];
229 1.1 agc } iscsid_add_target_rsp_t;
230 1.1 agc
231 1.1 agc /*
232 1.1 agc target_id
233 1.1 agc Is the unique ID assigned to this target.
234 1.1 agc num_portals
235 1.1 agc Number of portal IDs following.
236 1.1 agc portal_id
237 1.1 agc Array of unique IDs for the given portals, in the same order as in
238 1.1 agc the request.
239 1.1 agc */
240 1.1 agc
241 1.1 agc /* ==== ADD_PORTAL ==== */
242 1.1 agc
243 1.1 agc /* Request */
244 1.1 agc
245 1.1 agc typedef struct {
246 1.1 agc iscsid_sym_id_t target_id;
247 1.1 agc uint8_t sym_name[ISCSI_STRING_LENGTH];
248 1.1 agc iscsi_portal_address_t portal;
249 1.1 agc iscsid_portal_options_t options;
250 1.1 agc } iscsid_add_portal_req_t;
251 1.1 agc
252 1.1 agc /*
253 1.1 agc target_id
254 1.1 agc Is the unique ID for the target.
255 1.1 agc sym_name
256 1.1 agc Symbolic name of the portal (optional).
257 1.1 agc portal
258 1.1 agc Portal address.
259 1.1 agc options
260 1.1 agc Portal options.
261 1.1 agc */
262 1.1 agc
263 1.1 agc typedef struct {
264 1.1 agc iscsid_sym_id_t target_id;
265 1.1 agc iscsid_sym_id_t portal_id;
266 1.1 agc } iscsid_add_portal_rsp_t;
267 1.1 agc
268 1.1 agc /*
269 1.1 agc target_id
270 1.1 agc Reflects the target ID.
271 1.1 agc portal_id
272 1.1 agc Returns the unique ID of the portal and its name.
273 1.1 agc */
274 1.1 agc
275 1.1 agc /* ==== SET_TARGET_OPTIONS ==== */
276 1.1 agc
277 1.1 agc /* Request */
278 1.1 agc
279 1.1 agc typedef struct {
280 1.1 agc iscsid_list_kind_t list_kind;
281 1.1 agc iscsid_sym_id_t target_id;
282 1.1 agc struct {
283 1.2 christos unsigned int HeaderDigest:1;
284 1.2 christos unsigned int DataDigest:1;
285 1.2 christos unsigned int MaxConnections:1;
286 1.2 christos unsigned int DefaultTime2Wait:1;
287 1.2 christos unsigned int DefaultTime2Retain:1;
288 1.2 christos unsigned int MaxRecvDataSegmentLength:1;
289 1.2 christos unsigned int ErrorRecoveryLevel:1;
290 1.1 agc } is_present;
291 1.1 agc iscsi_digest_t HeaderDigest;
292 1.1 agc iscsi_digest_t DataDigest;
293 1.1 agc uint32_t MaxRecvDataSegmentLength;
294 1.1 agc uint16_t MaxConnections;
295 1.1 agc uint16_t DefaultTime2Wait;
296 1.1 agc uint16_t DefaultTime2Retain;
297 1.1 agc uint16_t ErrorRecoveryLevel;
298 1.1 agc } iscsid_get_set_target_options_t;
299 1.1 agc
300 1.1 agc /*
301 1.1 agc list_kind
302 1.1 agc Which list (TARGET_LIST or SEND_TARGETS_LIST)
303 1.1 agc target_id
304 1.1 agc Is the unique ID for the target.
305 1.1 agc is_present
306 1.1 agc Contains a bitfield that indicates which members of the structure
307 1.1 agc contain valid data.
308 1.1 agc HeaderDigest
309 1.1 agc Indicates the digest to use for PDU headers.
310 1.1 agc DataDigest
311 1.1 agc Indicates the digest to use for PDU data.
312 1.1 agc MaxRecvDataSegmentLength
313 1.1 agc Allows limiting or extending the maximum receive data segment length.
314 1.1 agc Must contain a value between 512 and 2**24-1 if specified.
315 1.1 agc MaxConnections
316 1.1 agc Contains a value between 1 and 65535 that specifies the maximum
317 1.1 agc number of connections to target devices that can be associated with
318 1.1 agc a single logon session. A value of 0 indicates that there no limit
319 1.1 agc to the number of connections.
320 1.1 agc DefaultTime2Wait
321 1.1 agc Specifies the minimum time to wait, in seconds, before attempting
322 1.1 agc to reconnect or reassign a connection that has been dropped.
323 1.1 agc DefaultTime2Retain
324 1.1 agc Specifies the maximum time, in seconds, allowed to reassign a
325 1.1 agc connection after the initial wait indicated in DefaultTime2Retain
326 1.1 agc has elapsed.
327 1.1 agc ErrorRecoveryLevel
328 1.1 agc Specifies the desired error recovery level for the session.
329 1.1 agc The default and maximum is 2.
330 1.1 agc */
331 1.1 agc
332 1.1 agc /*
333 1.1 agc Response: Status only.
334 1.1 agc */
335 1.1 agc
336 1.1 agc /* ==== GET_TARGET_OPTIONS ==== */
337 1.1 agc
338 1.1 agc /*
339 1.1 agc * Request: iscsid_list_id_t
340 1.1 agc */
341 1.1 agc
342 1.1 agc /*
343 1.1 agc Response: iscsid_get_set_target_options_t, see SET_TARGET_OPTIONS.
344 1.1 agc */
345 1.1 agc
346 1.1 agc /* ==== SET_TARGET_AUTHENTICATION ==== */
347 1.1 agc
348 1.1 agc /* Request */
349 1.1 agc
350 1.1 agc typedef struct {
351 1.1 agc iscsid_list_kind_t list_kind;
352 1.1 agc iscsid_sym_id_t target_id;
353 1.1 agc iscsi_auth_info_t auth_info;
354 1.1 agc uint8_t user_name[ISCSI_STRING_LENGTH];
355 1.1 agc uint8_t password[ISCSI_STRING_LENGTH];
356 1.1 agc uint8_t target_password[ISCSI_STRING_LENGTH];
357 1.1 agc } iscsid_set_target_authentication_req_t;
358 1.1 agc
359 1.1 agc /*
360 1.1 agc list_kind
361 1.1 agc Which list (TARGET_LIST or SEND_TARGETS_LIST)
362 1.1 agc target_id
363 1.1 agc Is the unique ID for the target or target portal.
364 1.1 agc auth_info
365 1.1 agc Is the information about authorization types and options.
366 1.1 agc user_name
367 1.1 agc Sets the user (or CHAP) name to use during login authentication of
368 1.1 agc the initiator (zero terminated UTF-8 string). Default is initiator
369 1.1 agc name.
370 1.1 agc password
371 1.1 agc Contains the password to use during login authentication of the
372 1.1 agc initiator (zero terminated UTF-8 string). Required if
373 1.1 agc authentication is requested.
374 1.1 agc target_password
375 1.1 agc Contains the password to use during login authentication of the
376 1.1 agc target (zero terminated UTF-8 string). Required if mutual
377 1.1 agc authentication is requested.
378 1.1 agc */
379 1.1 agc /*
380 1.1 agc Response: Status only.
381 1.1 agc */
382 1.1 agc
383 1.1 agc /* ==== SLP_FIND_TARGETS ==== */
384 1.1 agc
385 1.1 agc /*
386 1.1 agc Request:
387 1.1 agc The parameter contains the LDAPv3 filter string for the SLP search.
388 1.1 agc */
389 1.1 agc
390 1.1 agc typedef struct {
391 1.1 agc uint32_t num_portals;
392 1.1 agc uint32_t portal_id[1];
393 1.1 agc } iscsid_slp_find_targets_rsp_t;
394 1.1 agc
395 1.1 agc /*
396 1.1 agc num_portals
397 1.1 agc Number of portal IDs following.
398 1.1 agc portal_id
399 1.1 agc Array of unique IDs for the discovered portals.
400 1.1 agc */
401 1.1 agc /*
402 1.1 agc Response: Status only.
403 1.1 agc */
404 1.1 agc
405 1.1 agc /* ==== REFRESH_TARGETS ==== */
406 1.1 agc
407 1.1 agc /* Request */
408 1.1 agc
409 1.1 agc typedef struct {
410 1.1 agc iscsid_list_kind_t kind;
411 1.1 agc uint32_t num_ids;
412 1.1 agc uint32_t id[1];
413 1.1 agc } iscsid_refresh_req_t;
414 1.1 agc
415 1.1 agc /*
416 1.1 agc kind
417 1.1 agc The kind of list to refresh - either SEND_TARGETS_LIST or ISNS_LIST.
418 1.1 agc num_ids
419 1.1 agc Number of IDs following. If zero, all list members are used to
420 1.1 agc refresh the target list.
421 1.1 agc id
422 1.1 agc Array of IDs to refresh.
423 1.1 agc */
424 1.1 agc /*
425 1.1 agc Response: Status only.
426 1.1 agc */
427 1.1 agc
428 1.1 agc /* ==== REMOVE_TARGET ==== */
429 1.1 agc
430 1.1 agc /*
431 1.1 agc * Request: iscsid_list_id_t
432 1.1 agc */
433 1.1 agc
434 1.1 agc /*
435 1.1 agc Response: Status only.
436 1.1 agc */
437 1.1 agc
438 1.1 agc /* ==== SEARCH_LIST ==== */
439 1.1 agc
440 1.1 agc typedef struct {
441 1.1 agc iscsid_list_kind_t list_kind;
442 1.1 agc iscsid_search_kind_t search_kind;
443 1.1 agc uint8_t strval[ISCSI_STRING_LENGTH];
444 1.1 agc uint32_t intval;
445 1.1 agc } iscsid_search_list_req_t;
446 1.1 agc
447 1.1 agc /*
448 1.1 agc list_kind
449 1.1 agc Is the list kind.
450 1.1 agc search_kind
451 1.1 agc What to search for, also defines the contents of the 'strval' and/or
452 1.1 agc 'intval' fields.
453 1.1 agc strval
454 1.1 agc Is the string to look for.
455 1.1 agc intval
456 1.1 agc Is the integer value to look for.
457 1.1 agc */
458 1.1 agc
459 1.1 agc /*
460 1.1 agc * Response: iscsid_sym_id_t
461 1.1 agc */
462 1.1 agc
463 1.1 agc /* ==== GET_LIST ==== */
464 1.1 agc
465 1.1 agc /* Request */
466 1.1 agc
467 1.1 agc typedef struct {
468 1.1 agc iscsid_list_kind_t list_kind;
469 1.1 agc } iscsid_get_list_req_t;
470 1.1 agc
471 1.1 agc /*
472 1.1 agc list_kind
473 1.1 agc Is the list kind.
474 1.1 agc */
475 1.1 agc
476 1.1 agc typedef struct {
477 1.1 agc uint32_t num_entries;
478 1.1 agc uint32_t id[1];
479 1.1 agc } iscsid_get_list_rsp_t;
480 1.1 agc
481 1.1 agc /*
482 1.1 agc num_entries
483 1.1 agc Number of ID entries following.
484 1.1 agc id
485 1.1 agc Array of IDs in the requested list.
486 1.1 agc */
487 1.1 agc
488 1.1 agc /* ==== GET_TARGET_INFO ==== */
489 1.1 agc
490 1.1 agc /*
491 1.1 agc * Request: iscsid_list_id_t
492 1.1 agc */
493 1.1 agc
494 1.1 agc typedef struct {
495 1.1 agc iscsid_sym_id_t target_id;
496 1.1 agc uint8_t TargetName[ISCSI_STRING_LENGTH];
497 1.1 agc uint8_t TargetAlias[ISCSI_STRING_LENGTH];
498 1.1 agc uint32_t num_portals;
499 1.1 agc uint32_t portal[1];
500 1.1 agc } iscsid_get_target_rsp_t;
501 1.1 agc
502 1.1 agc /*
503 1.1 agc TargetName
504 1.1 agc The name of the target (zero terminated UTF-8 string).
505 1.1 agc TargetAlias
506 1.1 agc The alias of the target (zero terminated UTF-8 string).
507 1.1 agc num_portals
508 1.1 agc Number of portal IDs following.
509 1.1 agc portal
510 1.1 agc Array of portal IDs for this target.
511 1.1 agc */
512 1.1 agc
513 1.1 agc /* ==== GET_PORTAL_INFO ==== */
514 1.1 agc
515 1.1 agc /*
516 1.1 agc * Request: iscsid_list_id_t
517 1.1 agc */
518 1.1 agc
519 1.1 agc typedef struct {
520 1.1 agc iscsid_sym_id_t portal_id;
521 1.1 agc iscsid_sym_id_t target_id;
522 1.1 agc iscsi_portal_address_t portal;
523 1.1 agc iscsid_portal_options_t options;
524 1.1 agc } iscsid_get_portal_rsp_t;
525 1.1 agc
526 1.1 agc /*
527 1.1 agc portal_id
528 1.1 agc ID and symbolic name for the portal
529 1.1 agc target_id
530 1.1 agc ID and symbolic name for the associated target
531 1.1 agc portal
532 1.1 agc Portal address
533 1.1 agc options
534 1.1 agc Portal options
535 1.1 agc */
536 1.1 agc
537 1.1 agc /* ==== ADD_ISNS_SERVER ==== */
538 1.1 agc
539 1.1 agc /* Request */
540 1.1 agc
541 1.1 agc typedef struct {
542 1.1 agc uint8_t name[ISCSI_STRING_LENGTH];
543 1.1 agc uint8_t address[ISCSI_ADDRESS_LENGTH];
544 1.1 agc uint16_t port;
545 1.1 agc } iscsid_add_isns_server_req_t;
546 1.1 agc
547 1.1 agc /*
548 1.1 agc name
549 1.1 agc Symbolic name (optional)
550 1.1 agc address
551 1.1 agc Address (DNS name or IP address) of the iSNS server
552 1.1 agc port
553 1.1 agc IP port number.
554 1.1 agc */
555 1.1 agc
556 1.1 agc typedef struct {
557 1.1 agc uint32_t server_id;
558 1.1 agc } iscsid_add_isns_server_rsp_t;
559 1.1 agc
560 1.1 agc /*
561 1.1 agc server_id
562 1.1 agc Unique ID for the iSNS server.
563 1.1 agc */
564 1.1 agc
565 1.1 agc /* ==== GET_ISNS_SERVER ==== */
566 1.1 agc
567 1.1 agc /*
568 1.1 agc * Request: iscsid_sym_id_t
569 1.1 agc */
570 1.1 agc
571 1.1 agc typedef struct {
572 1.1 agc iscsid_sym_id_t server_id;
573 1.1 agc uint8_t address[ISCSI_STRING_LENGTH];
574 1.1 agc uint16_t port;
575 1.1 agc } iscsid_get_isns_server_rsp_t;
576 1.1 agc
577 1.1 agc /*
578 1.1 agc server_id
579 1.1 agc ID and symbolic name for the server
580 1.1 agc address
581 1.1 agc Server address
582 1.1 agc port
583 1.1 agc IP port number.
584 1.1 agc */
585 1.1 agc
586 1.1 agc /* ==== SLP_FIND_ISNS_SERVERS ==== */
587 1.1 agc
588 1.1 agc /*
589 1.1 agc Request:
590 1.1 agc The parameter may optionally contain a comma separated list of
591 1.1 agc scope names.
592 1.1 agc */
593 1.1 agc
594 1.1 agc typedef struct {
595 1.1 agc uint32_t num_servers;
596 1.1 agc uint32_t server_id[1];
597 1.1 agc } iscsid_find_isns_rsp_t;
598 1.1 agc
599 1.1 agc /*
600 1.1 agc num_servers
601 1.1 agc Number of iSNS server IDs following.
602 1.1 agc server_id
603 1.1 agc Array of server IDs.
604 1.1 agc */
605 1.1 agc
606 1.1 agc /* ==== REMOVE_ISNS_SERVER ==== */
607 1.1 agc
608 1.1 agc /*
609 1.1 agc * Request: iscsid_sym_id_t
610 1.1 agc */
611 1.1 agc /*
612 1.1 agc Response: Status only.
613 1.1 agc */
614 1.1 agc
615 1.1 agc /* ==== ADD_INITIATOR_PORTAL ==== */
616 1.1 agc
617 1.1 agc /* Request */
618 1.1 agc
619 1.1 agc typedef struct {
620 1.1 agc uint8_t name[ISCSI_STRING_LENGTH];
621 1.1 agc uint8_t address[ISCSI_ADDRESS_LENGTH];
622 1.1 agc } iscsid_add_initiator_req_t;
623 1.1 agc
624 1.1 agc /*
625 1.1 agc name
626 1.1 agc Symbolic name for this entry. Optional.
627 1.1 agc address
628 1.1 agc Interface address to add. Required.
629 1.1 agc */
630 1.1 agc
631 1.1 agc typedef struct {
632 1.1 agc uint32_t portal_id;
633 1.1 agc } iscsid_add_initiator_rsp_t;
634 1.1 agc
635 1.1 agc /*
636 1.1 agc id
637 1.1 agc Unique ID for the portal.
638 1.1 agc */
639 1.1 agc
640 1.1 agc /* ==== GET_INITIATOR_PORTAL ==== */
641 1.1 agc
642 1.1 agc /*
643 1.1 agc * Request: iscsid_sym_id_t
644 1.1 agc */
645 1.1 agc
646 1.1 agc typedef struct {
647 1.1 agc iscsid_sym_id_t portal_id;
648 1.1 agc uint8_t address[ISCSI_ADDRESS_LENGTH];
649 1.1 agc } iscsid_get_initiator_rsp_t;
650 1.1 agc
651 1.1 agc /*
652 1.1 agc portal_id
653 1.1 agc numeric and symbolic ID
654 1.1 agc address
655 1.1 agc Portal address.
656 1.1 agc */
657 1.1 agc
658 1.1 agc /* ==== REMOVE_INITIATOR_PORTAL ==== */
659 1.1 agc
660 1.1 agc /*
661 1.1 agc * Request: iscsid_sym_id_t
662 1.1 agc */
663 1.1 agc /*
664 1.1 agc Response: status only.
665 1.1 agc */
666 1.1 agc
667 1.1 agc /* ==== LOGIN ==== */
668 1.1 agc
669 1.1 agc /* Request */
670 1.1 agc
671 1.1 agc typedef struct {
672 1.1 agc iscsid_sym_id_t initiator_id;
673 1.1 agc iscsid_sym_id_t session_id;
674 1.1 agc iscsid_sym_id_t portal_id;
675 1.1 agc uint8_t sym_name[ISCSI_STRING_LENGTH];
676 1.1 agc iscsi_login_session_type_t login_type;
677 1.1 agc } iscsid_login_req_t;
678 1.1 agc
679 1.1 agc /*
680 1.1 agc initiator_id
681 1.1 agc Contains the initiator portal ID. When 0, the initiator portal
682 1.1 agc is selected automatically.
683 1.1 agc session_id
684 1.1 agc Contains the session ID for this connection. Must be 0 for login, a valid
685 1.1 agc session ID for add_connection.
686 1.1 agc portal_id
687 1.1 agc Contains the target portal ID to connect to.
688 1.1 agc sym_name
689 1.1 agc Optional unique non-numeric symbolic session (or connection) name.
690 1.1 agc login_type
691 1.1 agc Contains an enumerator value of type LOGINSESSIONTYPE that
692 1.1 agc indicates the type of logon session (discovery, non-mapped, or
693 1.1 agc mapped).
694 1.1 agc */
695 1.1 agc
696 1.1 agc typedef struct {
697 1.1 agc iscsid_sym_id_t session_id;
698 1.1 agc iscsid_sym_id_t connection_id;
699 1.1 agc } iscsid_login_rsp_t;
700 1.1 agc
701 1.1 agc /*
702 1.1 agc session_id
703 1.1 agc Receives an integer that identifies the session.
704 1.1 agc connection_id
705 1.1 agc Receives an integer that identifies the connection.
706 1.1 agc */
707 1.1 agc
708 1.1 agc /* ==== ADD_CONNECTION ==== */
709 1.1 agc
710 1.1 agc /*
711 1.1 agc Request and Response: see LOGIN.
712 1.1 agc */
713 1.1 agc
714 1.1 agc /* ==== LOGOUT ==== */
715 1.1 agc
716 1.1 agc /*
717 1.1 agc * Request: iscsid_sym_id_t
718 1.1 agc */
719 1.1 agc /*
720 1.1 agc Response: Status only.
721 1.1 agc */
722 1.1 agc
723 1.1 agc
724 1.1 agc /* ==== REMOVE_CONNECTION ==== */
725 1.1 agc
726 1.1 agc typedef struct {
727 1.1 agc iscsid_sym_id_t session_id;
728 1.1 agc iscsid_sym_id_t connection_id;
729 1.1 agc } iscsid_remove_connection_req_t;
730 1.1 agc
731 1.1 agc /*
732 1.1 agc session_id
733 1.1 agc Contains an integer that identifies the session.
734 1.1 agc connection_id
735 1.1 agc Identifies the connection to remove.
736 1.1 agc */
737 1.1 agc /*
738 1.1 agc Response: Status only.
739 1.1 agc */
740 1.1 agc
741 1.1 agc /* ==== GET_SESSION_LIST ==== */
742 1.1 agc
743 1.1 agc /*
744 1.1 agc Request: No parameter.
745 1.1 agc */
746 1.1 agc
747 1.1 agc typedef struct {
748 1.1 agc iscsid_sym_id_t session_id;
749 1.1 agc uint32_t first_connection_id;
750 1.1 agc uint32_t num_connections;
751 1.1 agc uint32_t portal_id;
752 1.1 agc uint32_t initiator_id;
753 1.1 agc } iscsid_session_list_entry_t;
754 1.1 agc
755 1.1 agc
756 1.1 agc /*
757 1.1 agc session_id
758 1.1 agc Contains the session identifier.
759 1.1 agc first_connection_id
760 1.1 agc Contains the connection identifier for the first connection.
761 1.1 agc num_connections
762 1.1 agc The number of active connections in this session.
763 1.1 agc portal_id
764 1.1 agc Target portal ID.
765 1.1 agc initiator_id
766 1.1 agc Index of the initiator portal. May be zero.
767 1.1 agc */
768 1.1 agc
769 1.1 agc typedef struct {
770 1.1 agc uint32_t num_entries;
771 1.1 agc iscsid_session_list_entry_t session[1];
772 1.1 agc } iscsid_get_session_list_rsp_t;
773 1.1 agc
774 1.1 agc /*
775 1.1 agc num_entries
776 1.1 agc The number of entries following.
777 1.1 agc session
778 1.1 agc The list entries (see above)
779 1.1 agc */
780 1.1 agc
781 1.1 agc
782 1.1 agc /* ==== GET_CONNECTION_LIST ==== */
783 1.1 agc
784 1.1 agc /*
785 1.1 agc * Request: iscsid_sym_id_t - session ID
786 1.1 agc */
787 1.1 agc
788 1.1 agc typedef struct {
789 1.1 agc iscsid_sym_id_t connection_id;
790 1.1 agc iscsid_sym_id_t target_portal_id;
791 1.1 agc iscsi_portal_address_t target_portal;
792 1.1 agc } iscsid_connection_list_entry_t;
793 1.1 agc
794 1.1 agc /*
795 1.1 agc connection_id
796 1.1 agc Connection ID.
797 1.1 agc target_portal_id
798 1.1 agc Target portal ID.
799 1.1 agc target_portal
800 1.1 agc Portal addresses of the target.
801 1.1 agc */
802 1.1 agc
803 1.1 agc typedef struct {
804 1.1 agc uint32_t num_connections;
805 1.1 agc iscsid_connection_list_entry_t connection[1];
806 1.1 agc } iscsid_get_connection_list_rsp_t;
807 1.1 agc
808 1.1 agc /*
809 1.1 agc num_connections
810 1.1 agc The number of connection descriptors following.
811 1.1 agc connection
812 1.1 agc The list entries (see above).
813 1.1 agc */
814 1.1 agc
815 1.1 agc
816 1.1 agc /* ==== GET_CONNECTION_INFO ==== */
817 1.1 agc
818 1.1 agc typedef struct {
819 1.1 agc iscsid_sym_id_t session_id;
820 1.1 agc iscsid_sym_id_t connection_id;
821 1.1 agc } iscsid_get_connection_info_req_t;
822 1.1 agc
823 1.1 agc /*
824 1.1 agc session_id
825 1.1 agc Contains an integer that identifies the session.
826 1.1 agc connection_id
827 1.1 agc Identifies the connection to retrieve.
828 1.1 agc */
829 1.1 agc
830 1.1 agc typedef struct {
831 1.1 agc iscsid_sym_id_t session_id;
832 1.1 agc iscsid_sym_id_t connection_id;
833 1.1 agc iscsid_sym_id_t initiator_id;
834 1.1 agc iscsid_sym_id_t target_portal_id;
835 1.1 agc uint8_t initiator_address[ISCSI_ADDRESS_LENGTH];
836 1.1 agc uint8_t TargetName[ISCSI_STRING_LENGTH];
837 1.1 agc uint8_t TargetAlias[ISCSI_STRING_LENGTH];
838 1.1 agc iscsi_portal_address_t target_portal;
839 1.1 agc } iscsid_get_connection_info_rsp_t;
840 1.1 agc
841 1.1 agc /*
842 1.1 agc session_id
843 1.1 agc Reflects session ID
844 1.1 agc connection_id
845 1.1 agc Reflects connection ID
846 1.1 agc initiator_id
847 1.1 agc Initiator portal ID. May be empty.
848 1.1 agc target_portal_id
849 1.1 agc Target portal ID.
850 1.1 agc initiator_address
851 1.1 agc Portal addresses of the initiator. May be empty if no initiators defined.
852 1.1 agc TargetName
853 1.1 agc The name of the target (zero terminated UTF-8 string).
854 1.1 agc TargetAlias
855 1.1 agc The alias of the target (zero terminated UTF-8 string).
856 1.1 agc target_portal
857 1.1 agc Portal addresses of the target.
858 1.1 agc */
859 1.1 agc
860 1.1 agc /* ===== set_node_name ===== */
861 1.1 agc
862 1.1 agc typedef struct {
863 1.1 agc uint8_t InitiatorName[ISCSI_STRING_LENGTH];
864 1.1 agc uint8_t InitiatorAlias[ISCSI_STRING_LENGTH];
865 1.1 agc uint8_t ISID[6];
866 1.1 agc } iscsid_set_node_name_req_t;
867 1.1 agc
868 1.1 agc /*
869 1.1 agc InitiatorName
870 1.1 agc Specifies the InitiatorName used during login. Required.
871 1.1 agc InitiatorAlias
872 1.1 agc Specifies the InitiatorAlias for use during login. May be empty.
873 1.1 agc ISID
874 1.1 agc Specifies the ISID (a 6 byte binary value) for use during login.
875 1.1 agc May be zero (all bytes) for the initiator to use a default value.
876 1.1 agc */
877 1.1 agc /*
878 1.1 agc Response: Status only.
879 1.1 agc */
880 1.1 agc
881 1.1 agc /* ===== get_version ===== */
882 1.1 agc
883 1.1 agc /*
884 1.1 agc Request: No parameter.
885 1.1 agc */
886 1.1 agc
887 1.1 agc typedef struct {
888 1.1 agc uint16_t interface_version;
889 1.1 agc uint16_t major;
890 1.1 agc uint16_t minor;
891 1.1 agc uint8_t version_string[ISCSI_STRING_LENGTH];
892 1.1 agc uint16_t driver_interface_version;
893 1.1 agc uint16_t driver_major;
894 1.1 agc uint16_t driver_minor;
895 1.1 agc uint8_t driver_version_string[ISCSI_STRING_LENGTH];
896 1.1 agc } iscsid_get_version_rsp_t;
897 1.1 agc
898 1.1 agc /*
899 1.1 agc interface_version
900 1.1 agc Updated when interface changes. Current Version is 2.
901 1.1 agc major
902 1.1 agc Major version number.
903 1.1 agc minor
904 1.1 agc Minor version number.
905 1.1 agc version_string
906 1.1 agc Displayable version string (zero terminated).
907 1.1 agc driver_xxx
908 1.1 agc Corresponding version information for driver.
909 1.1 agc */
910 1.1 agc
911 1.1 agc __END_DECLS
912 1.1 agc
913 1.1 agc #endif /* !_ISCSID_H_ */
914