/* * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By downloading, copying, installing or * using the software you agree to this license. If you do not agree to this license, do not download, install, * copy or use the software. * * Intel License Agreement * * Copyright (c) 2000, Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that * the following conditions are met: * * -Redistributions of source code must retain the above copyright notice, this list of conditions and the * following disclaimer. * * -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other materials provided with the distribution. * * -The name of Intel Corporation may not be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _INITIATOR_H_ #define _INITIATOR_H_ #include "iscsi.h" #include "parameters.h" #include "defs.h" #define CONFIG_INITIATOR_NUM_TARGETS 1 /*********** * Private * ***********/ #define CONFIG_INITIATOR_QUEUE_DEPTH CONFIG_INITIATOR_NUM_TARGETS #define CONFIG_INITIATOR_MAX_SESSIONS CONFIG_INITIATOR_NUM_TARGETS enum { INITIATOR_SESSION_STATE_INITIALIZING = 0x001, INITIATOR_SESSION_STATE_INITIALIZED = 0x002, INITIATOR_SESSION_STATE_CONNECTING = 0x004, INITIATOR_SESSION_STATE_CONNECTED = 0x008, INITIATOR_SESSION_STATE_LOGGING_IN = 0x010, INITIATOR_SESSION_STATE_AUTHENTICATED = 0x020, INITIATOR_SESSION_STATE_LOGGED_IN_NORMAL = 0x040, INITIATOR_SESSION_STATE_LOGGED_IN_DISCOVERY = 0x080, INITIATOR_SESSION_STATE_LOGGING_OUT = 0x100, INITIATOR_SESSION_STATE_LOGGED_OUT = 0x200, INITIATOR_SESSION_STATE_DESTROYING = 0x400 }; enum { TARGET_HOSTNAME_SIZE = 1024, TARGET_IP_SIZE = 16, TARGET_NAME_SIZE = 256 }; #define INITIATOR_STATE_SHUTDOWN 1 typedef struct { iscsi_mutex_t mutex; iscsi_cond_t cond; } initiator_wait_t; typedef struct iscsi_session_t { iscsi_socket_t sock; uint32_t CmdSN; uint32_t ExpStatSN; uint32_t MaxCmdSN; iscsi_queue_t tx_queue; iscsi_worker_t tx_worker; iscsi_worker_t rx_worker; uint64_t isid; int tsih; int cid; uint32_t state; iscsi_parameter_t *params; struct initiator_cmd_t *cmds; iscsi_spin_t cmds_spin; iscsi_sess_param_t sess_params; } initiator_session_t; typedef struct initiator_cmd_t { void *ptr; int type; int (*callback) (void *); void *callback_arg; uint64_t isid; int tx_done; int status; struct initiator_cmd_t *next; struct initiator_cmd_t *hash_next; uint32_t key; char targetname[TARGET_HOSTNAME_SIZE]; } initiator_cmd_t; typedef struct iscsi_target_t { char name[TARGET_HOSTNAME_SIZE]; char ip[TARGET_IP_SIZE]; int port; char TargetName[TARGET_NAME_SIZE]; initiator_session_t *sess; int has_session; } initiator_target_t; DEFINE_ARRAY(strv_t, char *); /********** * Public * **********/ int initiator_init(const char *, const char *, int, int, int); int initiator_info(char *, int, int); int initiator_command(initiator_cmd_t *); int initiator_enqueue(initiator_cmd_t *); int initiator_abort(initiator_cmd_t *); int initiator_shutdown(void); int initiator_discover(char *, uint64_t, int); #endif /* _INITIATOR_H_ */