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