Home | History | Annotate | Line # | Download | only in iscsid
      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