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