FreeBSD kernel CAM code
|
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/condvar.h>
#include <sys/endian.h>
#include <sys/file.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/mutex.h>
#include <sys/queue.h>
#include <sys/sbuf.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/uio.h>
#include <sys/unistd.h>
#include <sys/nv.h>
#include <sys/dnv.h>
#include <vm/uma.h>
#include <cam/scsi/scsi_all.h>
#include <cam/scsi/scsi_da.h>
#include <cam/ctl/ctl_io.h>
#include <cam/ctl/ctl.h>
#include <cam/ctl/ctl_backend.h>
#include <cam/ctl/ctl_error.h>
#include <cam/ctl/ctl_frontend.h>
#include <cam/ctl/ctl_debug.h>
#include <cam/ctl/ctl_ha.h>
#include <cam/ctl/ctl_ioctl.h>
#include <cam/ctl/ctl_private.h>
#include <dev/iscsi/icl.h>
#include <dev/iscsi/icl_wrappers.h>
#include <dev/iscsi/iscsi_proto.h>
#include <cam/ctl/ctl_frontend_iscsi.h>
Go to the source code of this file.
Data Structures | |
struct | cfiscsi_priv |
Macros | |
#define | ISCSI_BHS_OPCODE_INTERNAL 0x3e |
#define | CFISCSI_DEBUG(X, ...) |
#define | CFISCSI_WARN(X, ...) |
#define | CFISCSI_SESSION_DEBUG(S, X, ...) |
#define | CFISCSI_SESSION_WARN(S, X, ...) |
#define | CFISCSI_SESSION_LOCK(X) mtx_lock(&X->cs_lock) |
#define | CFISCSI_SESSION_UNLOCK(X) mtx_unlock(&X->cs_lock) |
#define | CFISCSI_SESSION_LOCK_ASSERT(X) mtx_assert(&X->cs_lock, MA_OWNED) |
#define | CONN_SESSION(X) ((struct cfiscsi_session *)(X)->ic_prv0) |
#define | PDU_SESSION(X) CONN_SESSION((X)->ip_conn) |
#define | PRIV(io) ((struct cfiscsi_priv *)&(io)->io_hdr.ctl_private[CTL_PRIV_FRONTEND]) |
#define | PRIV_REQUEST(io) PRIV(io)->request |
#define | PRIV_EXPDATASN(io) PRIV(io)->expdatasn |
#define | PRIV_R2TSN(io) PRIV(io)->r2tsn |
Functions | |
__FBSDID ("$FreeBSD$") | |
static | MALLOC_DEFINE (M_CFISCSI, "cfiscsi", "Memory used for CTL iSCSI frontend") |
SYSCTL_NODE (_kern_cam_ctl, OID_AUTO, iscsi, CTLFLAG_RD|CTLFLAG_MPSAFE, 0, "CAM Target Layer iSCSI Frontend") | |
SYSCTL_INT (_kern_cam_ctl_iscsi, OID_AUTO, debug, CTLFLAG_RWTUN, &debug, 1, "Enable debug messages") | |
SYSCTL_INT (_kern_cam_ctl_iscsi, OID_AUTO, ping_timeout, CTLFLAG_RWTUN, &ping_timeout, 5, "Interval between ping (NOP-Out) requests, in seconds") | |
SYSCTL_INT (_kern_cam_ctl_iscsi, OID_AUTO, login_timeout, CTLFLAG_RWTUN, &login_timeout, 60, "Time to wait for ctld(8) to finish Login Phase, in seconds") | |
SYSCTL_INT (_kern_cam_ctl_iscsi, OID_AUTO, maxtags, CTLFLAG_RWTUN, &maxtags, 0, "Max number of requests queued by initiator") | |
static int | cfiscsi_init (void) |
static int | cfiscsi_shutdown (void) |
static void | cfiscsi_online (void *arg) |
static void | cfiscsi_offline (void *arg) |
static int | cfiscsi_info (void *arg, struct sbuf *sb) |
static int | cfiscsi_ioctl (struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td) |
static void | cfiscsi_datamove (union ctl_io *io) |
static void | cfiscsi_datamove_in (union ctl_io *io) |
static void | cfiscsi_datamove_out (union ctl_io *io) |
static void | cfiscsi_done (union ctl_io *io) |
static bool | cfiscsi_pdu_update_cmdsn (const struct icl_pdu *request) |
static void | cfiscsi_pdu_handle_nop_out (struct icl_pdu *request) |
static void | cfiscsi_pdu_handle_scsi_command (struct icl_pdu *request) |
static void | cfiscsi_pdu_handle_task_request (struct icl_pdu *request) |
static void | cfiscsi_pdu_handle_data_out (struct icl_pdu *request) |
static void | cfiscsi_pdu_handle_logout_request (struct icl_pdu *request) |
static void | cfiscsi_session_terminate (struct cfiscsi_session *cs) |
static struct cfiscsi_data_wait * | cfiscsi_data_wait_new (struct cfiscsi_session *cs, union ctl_io *io, uint32_t initiator_task_tag, uint32_t *target_transfer_tagp) |
static void | cfiscsi_data_wait_free (struct cfiscsi_session *cs, struct cfiscsi_data_wait *cdw) |
static struct cfiscsi_target * | cfiscsi_target_find (struct cfiscsi_softc *softc, const char *name, uint16_t tag) |
static struct cfiscsi_target * | cfiscsi_target_find_or_create (struct cfiscsi_softc *softc, const char *name, const char *alias, uint16_t tag) |
static void | cfiscsi_target_release (struct cfiscsi_target *ct) |
static void | cfiscsi_session_delete (struct cfiscsi_session *cs) |
CTL_FRONTEND_DECLARE (cfiscsi, cfiscsi_frontend) | |
MODULE_DEPEND (cfiscsi, icl, 1, 1, 1) | |
static struct icl_pdu * | cfiscsi_pdu_new_response (struct icl_pdu *request, int flags) |
static void | cfiscsi_pdu_handle (struct icl_pdu *request) |
static void | cfiscsi_receive_callback (struct icl_pdu *request) |
static void | cfiscsi_error_callback (struct icl_conn *ic) |
static int | cfiscsi_pdu_prepare (struct icl_pdu *response) |
static void | cfiscsi_pdu_queue (struct icl_pdu *response) |
static void | cfiscsi_pdu_queue_cb (struct icl_pdu *response, icl_pdu_cb cb) |
static bool | cfiscsi_handle_data_segment (struct icl_pdu *request, struct cfiscsi_data_wait *cdw) |
static void | cfiscsi_callout (void *context) |
static void | cfiscsi_data_wait_abort (struct cfiscsi_session *cs, struct cfiscsi_data_wait *cdw, int status) |
static void | cfiscsi_session_terminate_tasks (struct cfiscsi_session *cs) |
static void | cfiscsi_maintenance_thread (void *arg) |
static int | cfiscsi_session_register_initiator (struct cfiscsi_session *cs) |
static void | cfiscsi_session_unregister_initiator (struct cfiscsi_session *cs) |
static struct cfiscsi_session * | cfiscsi_session_new (struct cfiscsi_softc *softc, const char *offload) |
static void | cfiscsi_ioctl_handoff (struct ctl_iscsi *ci) |
static void | cfiscsi_ioctl_list (struct ctl_iscsi *ci) |
static void | cfiscsi_ioctl_logout (struct ctl_iscsi *ci) |
static void | cfiscsi_ioctl_terminate (struct ctl_iscsi *ci) |
static void | cfiscsi_ioctl_limits (struct ctl_iscsi *ci) |
static void | cfiscsi_ioctl_port_create (struct ctl_req *req) |
static void | cfiscsi_ioctl_port_remove (struct ctl_req *req) |
static void | cfiscsi_target_hold (struct cfiscsi_target *ct) |
static void | cfiscsi_pdu_done (struct icl_pdu *ip, int error) |
static void | cfiscsi_scsi_command_done (union ctl_io *io) |
static void | cfiscsi_task_management_done (union ctl_io *io) |
Variables | |
static uma_zone_t | cfiscsi_data_wait_zone |
static int | debug = 1 |
static int | ping_timeout = 5 |
static int | login_timeout = 60 |
static int | maxtags = 256 |
static struct cfiscsi_softc | cfiscsi_softc |
static struct ctl_frontend | cfiscsi_frontend |
#define CFISCSI_DEBUG | ( | X, | |
... | |||
) |
Definition at line 108 of file ctl_frontend_iscsi.c.
#define CFISCSI_SESSION_DEBUG | ( | S, | |
X, | |||
... | |||
) |
Definition at line 124 of file ctl_frontend_iscsi.c.
#define CFISCSI_SESSION_LOCK | ( | X | ) | mtx_lock(&X->cs_lock) |
Definition at line 142 of file ctl_frontend_iscsi.c.
#define CFISCSI_SESSION_LOCK_ASSERT | ( | X | ) | mtx_assert(&X->cs_lock, MA_OWNED) |
Definition at line 144 of file ctl_frontend_iscsi.c.
#define CFISCSI_SESSION_UNLOCK | ( | X | ) | mtx_unlock(&X->cs_lock) |
Definition at line 143 of file ctl_frontend_iscsi.c.
#define CFISCSI_SESSION_WARN | ( | S, | |
X, | |||
... | |||
) |
Definition at line 133 of file ctl_frontend_iscsi.c.
#define CFISCSI_WARN | ( | X, | |
... | |||
) |
Definition at line 116 of file ctl_frontend_iscsi.c.
#define CONN_SESSION | ( | X | ) | ((struct cfiscsi_session *)(X)->ic_prv0) |
Definition at line 146 of file ctl_frontend_iscsi.c.
#define ISCSI_BHS_OPCODE_INTERNAL 0x3e |
Definition at line 88 of file ctl_frontend_iscsi.c.
#define PDU_SESSION | ( | X | ) | CONN_SESSION((X)->ip_conn) |
Definition at line 147 of file ctl_frontend_iscsi.c.
#define PRIV | ( | io | ) | ((struct cfiscsi_priv *)&(io)->io_hdr.ctl_private[CTL_PRIV_FRONTEND]) |
Definition at line 154 of file ctl_frontend_iscsi.c.
#define PRIV_EXPDATASN | ( | io | ) | PRIV(io)->expdatasn |
Definition at line 157 of file ctl_frontend_iscsi.c.
#define PRIV_R2TSN | ( | io | ) | PRIV(io)->r2tsn |
Definition at line 158 of file ctl_frontend_iscsi.c.
#define PRIV_REQUEST | ( | io | ) | PRIV(io)->request |
Definition at line 156 of file ctl_frontend_iscsi.c.
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 1005 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_queue(), cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, cfiscsi_session::cs_callout, cfiscsi_session::cs_conn, cfiscsi_session::cs_terminating, cfiscsi_session::cs_timeout, login_timeout, and ping_timeout.
Referenced by cfiscsi_session_new().
|
static |
Definition at line 1115 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_ctl_io, cfiscsi_data_wait_free(), ctl_datamove_done(), ctl_io_hdr::flags, ctl_scsiio::io_hdr, ctl_io::io_hdr, ctl_io_hdr::port_status, and ctl_io::scsiio.
Referenced by cfiscsi_datamove_out(), cfiscsi_session_terminate_tasks(), and cfiscsi_task_management_done().
|
static |
Definition at line 1106 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_icl_prv, cfiscsi_data_wait_zone, and cfiscsi_session::cs_conn.
Referenced by cfiscsi_data_wait_abort(), cfiscsi_datamove_out(), and cfiscsi_pdu_handle_data_out().
|
static |
Definition at line 1076 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_ctl_io, cfiscsi_data_wait::cdw_icl_prv, cfiscsi_data_wait::cdw_initiator_task_tag, cfiscsi_data_wait::cdw_target_transfer_tag, cfiscsi_data_wait_zone, CFISCSI_SESSION_WARN, cfiscsi_session::cs_conn, and PRIV_REQUEST.
Referenced by cfiscsi_datamove_out().
|
static |
Definition at line 2852 of file ctl_frontend_iscsi.c.
References cfiscsi_datamove_in(), cfiscsi_datamove_out(), CTL_FLAG_DATA_IN, CTL_FLAG_DATA_MASK, ctl_scsiio::ext_data_filled, ctl_io_hdr::flags, ctl_io::io_hdr, and ctl_io::scsiio.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 2460 of file ctl_frontend_iscsi.c.
References ctl_sg_entry::addr, cfiscsi_pdu_done(), cfiscsi_pdu_new_response(), cfiscsi_pdu_queue_cb(), CFISCSI_SESSION_DEBUG, cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, cfiscsi_session::cs_conn, ctl_datamove_done(), CTL_FLAG_STATUS_SENT, ctl_set_busy(), CTL_SUCCESS, ctl_io_hdr::flags, ctl_io::io_hdr, ctl_scsiio::kern_data_arg, ctl_scsiio::kern_data_len, ctl_scsiio::kern_data_ptr, ctl_scsiio::kern_data_ref, ctl_scsiio::kern_data_resid, ctl_scsiio::kern_rel_offset, ctl_scsiio::kern_sg_entries, ctl_scsiio::kern_total_len, ctl_sg_entry::len, PDU_SESSION, PRIV_EXPDATASN, PRIV_REQUEST, ctl_scsiio::scsi_status, ctl_io::scsiio, and ctl_io_hdr::status.
Referenced by cfiscsi_datamove().
|
static |
Definition at line 2692 of file ctl_frontend_iscsi.c.
References ctl_sg_entry::addr, cfiscsi_data_wait::cdw_ctl_io, cfiscsi_data_wait::cdw_datasn, cfiscsi_data_wait::cdw_initiator_task_tag, cfiscsi_data_wait::cdw_r2t_end, cfiscsi_data_wait::cdw_sg_addr, cfiscsi_data_wait::cdw_sg_index, cfiscsi_data_wait::cdw_sg_len, cfiscsi_data_wait::cdw_target_transfer_tag, cfiscsi_data_wait_abort(), cfiscsi_data_wait_free(), cfiscsi_data_wait_new(), cfiscsi_handle_data_segment(), cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_LOCK, cfiscsi_session_terminate(), CFISCSI_SESSION_UNLOCK, CFISCSI_SESSION_WARN, cfiscsi_session::cs_immediate_data, cfiscsi_session::cs_max_burst_length, cfiscsi_session::cs_target_transfer_tag, cfiscsi_session::cs_terminating_tasks, ctl_datamove_done(), CTL_FLAG_ABORT, CTL_FLAG_DMA_INPROG, ctl_set_busy(), ctl_scsiio::ext_data_filled, ctl_io_hdr::flags, ctl_io::io_hdr, ctl_scsiio::kern_data_len, ctl_scsiio::kern_data_ptr, ctl_scsiio::kern_rel_offset, ctl_scsiio::kern_sg_entries, ctl_sg_entry::len, PDU_SESSION, PRIV_R2TSN, PRIV_REQUEST, and ctl_io::scsiio.
Referenced by cfiscsi_datamove(), and cfiscsi_pdu_handle_data_out().
|
static |
Definition at line 3043 of file ctl_frontend_iscsi.c.
References cfiscsi_scsi_command_done(), cfiscsi_task_management_done(), cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_tasks_aborted, ctl_free_io(), CTL_STATUS_MASK, CTL_STATUS_NONE, ctl_io::io_hdr, ISCSI_BHS_OPCODE_INTERNAL, PDU_SESSION, PRIV_REQUEST, and ctl_io_hdr::status.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 347 of file ctl_frontend_iscsi.c.
References cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, and CONN_SESSION.
Referenced by cfiscsi_session_new().
|
static |
Definition at line 697 of file ctl_frontend_iscsi.c.
References ctl_sg_entry::addr, cfiscsi_data_wait::cdw_ctl_io, cfiscsi_data_wait::cdw_r2t_end, cfiscsi_data_wait::cdw_sg_addr, cfiscsi_data_wait::cdw_sg_index, cfiscsi_data_wait::cdw_sg_len, cfiscsi_data_wait::cdw_target_transfer_tag, CFISCSI_SESSION_DEBUG, cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, CTL_FLAG_DATA_IN, CTL_FLAG_DATA_MASK, ctl_set_data_phase_error(), ctl_scsiio::ext_data_filled, ctl_io_hdr::flags, ctl_io::io_hdr, ctl_scsiio::kern_data_len, ctl_scsiio::kern_data_ptr, ctl_scsiio::kern_data_resid, ctl_scsiio::kern_rel_offset, ctl_scsiio::kern_sg_entries, ctl_scsiio::kern_total_len, ctl_sg_entry::len, PDU_SESSION, and ctl_io::scsiio.
Referenced by cfiscsi_datamove_out(), and cfiscsi_pdu_handle_data_out().
|
static |
Definition at line 1510 of file ctl_frontend_iscsi.c.
References cfiscsi_target::ct_state.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 1365 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait_zone, cfiscsi_softc, cfiscsi_softc::lock, and cfiscsi_softc::sessions_cv.
|
static |
Definition at line 2285 of file ctl_frontend_iscsi.c.
References cfiscsi_ioctl_handoff(), cfiscsi_ioctl_limits(), cfiscsi_ioctl_list(), cfiscsi_ioctl_logout(), cfiscsi_ioctl_port_create(), cfiscsi_ioctl_port_remove(), cfiscsi_ioctl_terminate(), CTL_ISCSI, CTL_ISCSI_ACCEPT, CTL_ISCSI_ERROR, CTL_ISCSI_HANDOFF, CTL_ISCSI_LIMITS, CTL_ISCSI_LIST, CTL_ISCSI_LISTEN, CTL_ISCSI_LOGOUT, CTL_ISCSI_RECEIVE, CTL_ISCSI_SEND, CTL_ISCSI_TERMINATE, CTL_LUN_ERROR, CTL_PORT_REQ, CTL_REQ_CREATE, CTL_REQ_REMOVE, ctl_req::error_str, ctl_iscsi::error_str, ctl_req::reqtype, ctl_req::status, ctl_iscsi::status, and ctl_iscsi::type.
|
static |
Definition at line 1521 of file ctl_frontend_iscsi.c.
References CFISCSI_DEBUG, cfiscsi_pdu_handle(), CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_LOCK, cfiscsi_session_new(), cfiscsi_session_register_initiator(), cfiscsi_session_terminate(), CFISCSI_SESSION_UNLOCK, CFISCSI_SESSION_WARN, cfiscsi_softc, cfiscsi_target_find(), cfiscsi_target_release(), ctl_iscsi_handoff_params::cmdsn, cfiscsi_session::cs_cmdsn, cfiscsi_session::cs_conn, cfiscsi_session::cs_first_burst_length, cfiscsi_session::cs_handoff_in_progress, cfiscsi_session::cs_id, cfiscsi_session::cs_immediate_data, cfiscsi_session::cs_initiator_addr, cfiscsi_session::cs_initiator_alias, cfiscsi_session::cs_initiator_id, cfiscsi_session::cs_initiator_isid, cfiscsi_session::cs_initiator_name, cfiscsi_session::cs_max_burst_length, cfiscsi_session::cs_statsn, cfiscsi_session::cs_target, cfiscsi_session::cs_tasks_aborted, cfiscsi_session::cs_terminating, cfiscsi_target::ct_online, CTL_ISCSI_DIGEST_CRC32C, CTL_ISCSI_ERROR, CTL_ISCSI_OK, ctl_iscsi::data, ctl_iscsi_handoff_params::data_digest, ctl_iscsi::error_str, ctl_iscsi_handoff_params::first_burst_length, ctl_iscsi_handoff_params::header_digest, ctl_iscsi_handoff_params::immediate_data, ctl_iscsi_handoff_params::initiator_addr, ctl_iscsi_handoff_params::initiator_alias, ctl_iscsi_handoff_params::initiator_isid, ctl_iscsi_handoff_params::initiator_name, cfiscsi_softc::lock, ctl_iscsi_handoff_params::max_burst_length, ctl_iscsi_handoff_params::max_recv_data_segment_length, ctl_iscsi_handoff_params::max_send_data_segment_length, ctl_iscsi_handoff_params::offload, ctl_iscsi_handoff_params::portal_group_tag, ctl_iscsi_handoff_params::socket, ctl_iscsi_handoff_params::statsn, ctl_iscsi::status, and ctl_iscsi_handoff_params::target_name.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 1891 of file ctl_frontend_iscsi.c.
References CTL_ISCSI_ERROR, CTL_ISCSI_OK, ctl_iscsi::data, ctl_iscsi::error_str, ctl_iscsi_limits_params::first_burst_length, ctl_iscsi_limits_params::max_burst_length, ctl_iscsi_limits_params::max_recv_data_segment_length, ctl_iscsi_limits_params::max_send_data_segment_length, ctl_iscsi_limits_params::offload, and ctl_iscsi::status.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 1709 of file ctl_frontend_iscsi.c.
References ctl_iscsi_list_params::alloc_len, cfiscsi_softc, ctl_iscsi_list_params::conn_xml, cfiscsi_session::cs_conn, cfiscsi_session::cs_first_burst_length, cfiscsi_session::cs_id, cfiscsi_session::cs_immediate_data, cfiscsi_session::cs_initiator_addr, cfiscsi_session::cs_initiator_alias, cfiscsi_session::cs_initiator_name, cfiscsi_session::cs_max_burst_length, cfiscsi_session::cs_target, cfiscsi_target::ct_alias, cfiscsi_target::ct_name, cfiscsi_target::ct_tag, CTL_ISCSI_ERROR, CTL_ISCSI_LIST_NEED_MORE_SPACE, CTL_ISCSI_OK, ctl_iscsi::data, ctl_iscsi::error_str, ctl_iscsi_list_params::fill_len, cfiscsi_softc::lock, and ctl_iscsi::status.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 1792 of file ctl_frontend_iscsi.c.
References ctl_iscsi_logout_params::all, cfiscsi_pdu_queue(), cfiscsi_softc, ctl_iscsi_logout_params::connection_id, cfiscsi_session::cs_conn, cfiscsi_session::cs_id, cfiscsi_session::cs_initiator_addr, cfiscsi_session::cs_initiator_name, CTL_ISCSI_ERROR, CTL_ISCSI_OK, CTL_ISCSI_SESSION_NOT_FOUND, ctl_iscsi::data, ctl_iscsi::error_str, ctl_iscsi_logout_params::initiator_addr, ctl_iscsi_logout_params::initiator_name, cfiscsi_softc::lock, and ctl_iscsi::status.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 2147 of file ctl_frontend_iscsi.c.
References ctl_req::args_nvl, cfiscsi_datamove(), cfiscsi_done(), cfiscsi_frontend, cfiscsi_info(), cfiscsi_offline(), cfiscsi_online(), cfiscsi_target_find_or_create(), cfiscsi_target_release(), CFISCSI_TARGET_STATE_ACTIVE, CFISCSI_TARGET_STATE_DYING, cfiscsi_target::ct_port, cfiscsi_target::ct_state, cfiscsi_target::ct_target_id, CTL_LUN_ERROR, CTL_LUN_OK, CTL_PORT_ISCSI, ctl_port_register(), ctl_devid::data, ctl_req::error_str, ctl_port::fe_datamove, ctl_port::fe_done, ctl_port::frontend, scsi_vpd_id_descriptor::id_type, scsi_vpd_id_descriptor::identifier, ctl_devid::len, scsi_vpd_id_descriptor::length, ctl_port::num_requested_ctl_io, ctl_port::onoff_arg, ctl_port::options, ctl_port::physical_port, ctl_port::port_devid, ctl_port::port_info, ctl_port::port_name, ctl_port::port_offline, ctl_port::port_online, ctl_port::port_type, scsi_vpd_id_descriptor::proto_codeset, ctl_req::result_nvl, SCSI_PROTO_ISCSI, ctl_req::status, SVPD_ID_ASSOC_PORT, SVPD_ID_ASSOC_TARGET, SVPD_ID_CODESET_UTF8, SVPD_ID_PIV, SVPD_ID_TYPE_SCSI_NAME, ctl_port::targ_port, ctl_port::target_devid, and ctl_port::virtual_port.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 2251 of file ctl_frontend_iscsi.c.
References ctl_req::args_nvl, cfiscsi_target_find(), cfiscsi_target_release(), CFISCSI_TARGET_STATE_DYING, cfiscsi_target::ct_port, cfiscsi_target::ct_state, CTL_LUN_ERROR, CTL_LUN_OK, ctl_port_offline(), ctl_req::error_str, and ctl_req::status.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 1841 of file ctl_frontend_iscsi.c.
References ctl_iscsi_terminate_params::all, cfiscsi_pdu_queue(), cfiscsi_session_terminate(), cfiscsi_softc, ctl_iscsi_terminate_params::connection_id, cfiscsi_session::cs_conn, cfiscsi_session::cs_id, cfiscsi_session::cs_initiator_addr, cfiscsi_session::cs_initiator_name, CTL_ISCSI_OK, CTL_ISCSI_SESSION_NOT_FOUND, ctl_iscsi::data, ctl_iscsi::error_str, ctl_iscsi_terminate_params::initiator_addr, ctl_iscsi_terminate_params::initiator_name, cfiscsi_softc::lock, and ctl_iscsi::status.
Referenced by cfiscsi_ioctl().
|
static |
Definition at line 1193 of file ctl_frontend_iscsi.c.
References CFISCSI_SESSION_DEBUG, cfiscsi_session_delete(), CFISCSI_SESSION_LOCK, cfiscsi_session_terminate_tasks(), CFISCSI_SESSION_UNLOCK, cfiscsi_session::cs_callout, cfiscsi_session::cs_conn, cfiscsi_session::cs_handoff_in_progress, cfiscsi_session::cs_lock, cfiscsi_session::cs_maintenance_cv, and cfiscsi_session::cs_terminating.
Referenced by cfiscsi_session_new().
|
static |
Definition at line 1463 of file ctl_frontend_iscsi.c.
References CFISCSI_SESSION_DEBUG, cfiscsi_session_terminate(), cfiscsi_session::cs_target, cfiscsi_target::ct_online, cfiscsi_target::ct_softc, cfiscsi_softc::lock, cfiscsi_softc::online, and cfiscsi_softc::sessions_cv.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 1435 of file ctl_frontend_iscsi.c.
References cfiscsi_target::ct_online, cfiscsi_target::ct_softc, cfiscsi_softc::lock, and cfiscsi_softc::online.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 2451 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_datamove_in().
|
static |
Definition at line 280 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_handle_data_out(), cfiscsi_pdu_handle_logout_request(), cfiscsi_pdu_handle_nop_out(), cfiscsi_pdu_handle_scsi_command(), cfiscsi_pdu_handle_task_request(), cfiscsi_pdu_update_cmdsn(), cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, and PDU_SESSION.
Referenced by cfiscsi_ioctl_handoff(), and cfiscsi_receive_callback().
|
static |
Definition at line 881 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_ctl_io, cfiscsi_data_wait::cdw_datasn, cfiscsi_data_wait::cdw_initiator_task_tag, cfiscsi_data_wait::cdw_r2t_end, cfiscsi_data_wait::cdw_target_transfer_tag, cfiscsi_data_wait_free(), cfiscsi_datamove_out(), cfiscsi_handle_data_segment(), CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_LOCK, cfiscsi_session_terminate(), CFISCSI_SESSION_UNLOCK, CFISCSI_SESSION_WARN, ctl_datamove_done(), CTL_FLAG_DATA_IN, CTL_FLAG_DATA_MASK, ctl_scsiio::ext_data_filled, ctl_io_hdr::flags, ctl_io::io_hdr, ctl_scsiio::kern_data_len, PDU_SESSION, and ctl_io::scsiio.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 948 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), CFISCSI_SESSION_DEBUG, cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, and PDU_SESSION.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 441 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, and PDU_SESSION.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 509 of file ctl_frontend_iscsi.c.
References ctl_scsiio::cdb, ctl_scsiio::cdb_len, cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_immediate_data, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_target, cfiscsi_target::ct_port, ctl_alloc_io(), ctl_decode_lun(), ctl_free_io(), CTL_IO_SCSI, ctl_port::ctl_pool_ref, CTL_RETVAL_COMPLETE, ctl_run(), CTL_TAG_ACA, CTL_TAG_HEAD_OF_QUEUE, CTL_TAG_ORDERED, CTL_TAG_SIMPLE, CTL_TAG_UNTAGGED, ctl_zero_io(), ctl_nexus::initid, ctl_io::io_hdr, ctl_io_hdr::io_type, ctl_io_hdr::nexus, PDU_SESSION, ctl_scsiio::priority, PRIV_REQUEST, ctl_io::scsiio, ctl_scsiio::tag_num, ctl_scsiio::tag_type, ctl_nexus::targ_lun, ctl_port::targ_port, and ctl_nexus::targ_port.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 575 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), CFISCSI_SESSION_DEBUG, cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_target, cfiscsi_target::ct_port, ctl_alloc_io(), ctl_decode_lun(), ctl_free_io(), CTL_IO_TASK, ctl_port::ctl_pool_ref, CTL_RETVAL_COMPLETE, ctl_run(), CTL_TAG_SIMPLE, CTL_TASK_ABORT_TASK, CTL_TASK_ABORT_TASK_SET, CTL_TASK_CLEAR_TASK_SET, CTL_TASK_I_T_NEXUS_RESET, CTL_TASK_LUN_RESET, CTL_TASK_QUERY_ASYNC_EVENT, CTL_TASK_QUERY_TASK, CTL_TASK_QUERY_TASK_SET, CTL_TASK_TARGET_RESET, ctl_zero_io(), ctl_nexus::initid, ctl_io::io_hdr, ctl_io_hdr::io_type, ctl_io_hdr::nexus, PDU_SESSION, PRIV_REQUEST, ctl_taskio::tag_num, ctl_taskio::tag_type, ctl_nexus::targ_lun, ctl_port::targ_port, ctl_nexus::targ_port, ctl_taskio::task_action, and ctl_io::taskio.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 205 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_datamove_in(), cfiscsi_datamove_out(), cfiscsi_pdu_handle_logout_request(), cfiscsi_pdu_handle_nop_out(), cfiscsi_pdu_handle_task_request(), cfiscsi_scsi_command_done(), and cfiscsi_task_management_done().
|
static |
Definition at line 358 of file ctl_frontend_iscsi.c.
References CFISCSI_SESSION_LOCK_ASSERT, cfiscsi_session::cs_cmdsn, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_statsn, maxtags, and PDU_SESSION.
Referenced by cfiscsi_pdu_queue(), and cfiscsi_pdu_queue_cb().
|
static |
Definition at line 417 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_prepare(), CFISCSI_SESSION_LOCK, CFISCSI_SESSION_UNLOCK, and PDU_SESSION.
Referenced by cfiscsi_callout(), cfiscsi_datamove_out(), cfiscsi_ioctl_logout(), cfiscsi_ioctl_terminate(), cfiscsi_pdu_handle_logout_request(), cfiscsi_pdu_handle_nop_out(), cfiscsi_pdu_handle_task_request(), cfiscsi_scsi_command_done(), and cfiscsi_task_management_done().
|
static |
Definition at line 430 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_prepare(), CFISCSI_SESSION_LOCK, CFISCSI_SESSION_UNLOCK, and PDU_SESSION.
Referenced by cfiscsi_datamove_in().
|
static |
Definition at line 212 of file ctl_frontend_iscsi.c.
References cfiscsi_session_terminate(), CFISCSI_SESSION_WARN, cfiscsi_session::cs_cmdsn, cfiscsi_session::cs_timeout, maxtags, and PDU_SESSION.
Referenced by cfiscsi_pdu_handle().
|
static |
Definition at line 327 of file ctl_frontend_iscsi.c.
References cfiscsi_pdu_handle(), and PDU_SESSION.
Referenced by cfiscsi_session_new().
|
static |
Definition at line 2865 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_initiator_task_tag, cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_LOCK, CFISCSI_SESSION_UNLOCK, CTL_FLAG_ABORT, CTL_FLAG_ABORT_STATUS, CTL_FLAG_STATUS_SENT, ctl_free_io(), ctl_io_hdr::flags, ctl_io::io_hdr, ctl_scsiio::kern_total_len, PDU_SESSION, PRIV_EXPDATASN, PRIV_REQUEST, ctl_scsiio::scsi_status, ctl_io::scsiio, ctl_scsiio::sense_data, and ctl_scsiio::sense_len.
Referenced by cfiscsi_done().
|
static |
Definition at line 1340 of file ctl_frontend_iscsi.c.
References cfiscsi_session_unregister_initiator(), cfiscsi_softc, cfiscsi_target_release(), cfiscsi_session::cs_conn, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_target, cfiscsi_softc::lock, and cfiscsi_softc::sessions_cv.
Referenced by cfiscsi_maintenance_thread().
|
static |
Definition at line 1282 of file ctl_frontend_iscsi.c.
References cfiscsi_callout(), cfiscsi_error_callback(), cfiscsi_maintenance_thread(), cfiscsi_receive_callback(), CFISCSI_SESSION_WARN, CFISCSI_WARN, cfiscsi_session::cs_callout, cfiscsi_session::cs_conn, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_handoff_in_progress, cfiscsi_session::cs_id, cfiscsi_session::cs_lock, cfiscsi_session::cs_maintenance_cv, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_softc::last_session_id, and cfiscsi_softc::lock.
Referenced by cfiscsi_ioctl_handoff().
|
static |
Definition at line 1240 of file ctl_frontend_iscsi.c.
References CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_WARN, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_initiator_id, cfiscsi_session::cs_target, cfiscsi_target::ct_port, and ctl_add_initiator().
Referenced by cfiscsi_ioctl_handoff().
|
static |
Definition at line 1229 of file ctl_frontend_iscsi.c.
References cfiscsi_session::cs_maintenance_cv, and cfiscsi_session::cs_terminating.
Referenced by cfiscsi_callout(), cfiscsi_datamove_in(), cfiscsi_datamove_out(), cfiscsi_error_callback(), cfiscsi_handle_data_segment(), cfiscsi_ioctl_handoff(), cfiscsi_ioctl_terminate(), cfiscsi_offline(), cfiscsi_pdu_handle(), cfiscsi_pdu_handle_data_out(), cfiscsi_pdu_handle_logout_request(), cfiscsi_pdu_handle_nop_out(), cfiscsi_pdu_handle_scsi_command(), cfiscsi_pdu_handle_task_request(), cfiscsi_pdu_update_cmdsn(), and cfiscsi_task_management_done().
|
static |
Definition at line 1134 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait_abort(), CFISCSI_SESSION_LOCK, CFISCSI_SESSION_UNLOCK, CFISCSI_SESSION_WARN, cfiscsi_session::cs_conn, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_outstanding_ctl_pdus, cfiscsi_session::cs_target, cfiscsi_session::cs_terminating_tasks, cfiscsi_target::ct_port, ctl_alloc_io(), ctl_free_io(), CTL_IO_TASK, ctl_port::ctl_pool_ref, CTL_RETVAL_COMPLETE, ctl_run(), CTL_TAG_SIMPLE, CTL_TASK_I_T_NEXUS_RESET, ctl_zero_io(), ctl_nexus::initid, ctl_io::io_hdr, ctl_io_hdr::io_type, ISCSI_BHS_OPCODE_INTERNAL, ctl_io_hdr::nexus, PRIV_REQUEST, ctl_taskio::tag_type, ctl_nexus::targ_lun, ctl_port::targ_port, ctl_nexus::targ_port, ctl_taskio::task_action, and ctl_io::taskio.
Referenced by cfiscsi_maintenance_thread().
|
static |
Definition at line 1266 of file ctl_frontend_iscsi.c.
References CFISCSI_SESSION_WARN, cfiscsi_session::cs_ctl_initid, cfiscsi_session::cs_target, cfiscsi_target::ct_port, and ctl_remove_initiator().
Referenced by cfiscsi_session_delete().
|
static |
Definition at line 1388 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait_zone, cfiscsi_softc, cfiscsi_softc::lock, and cfiscsi_softc::sessions_cv.
|
static |
Definition at line 2393 of file ctl_frontend_iscsi.c.
References cfiscsi_target_hold(), CFISCSI_TARGET_STATE_ACTIVE, cfiscsi_target::ct_name, cfiscsi_target::ct_state, cfiscsi_target::ct_tag, and cfiscsi_softc::lock.
Referenced by cfiscsi_ioctl_handoff(), and cfiscsi_ioctl_port_remove().
|
static |
Definition at line 2413 of file ctl_frontend_iscsi.c.
References cfiscsi_target_hold(), CFISCSI_TARGET_STATE_INVALID, cfiscsi_target::ct_alias, cfiscsi_target::ct_name, cfiscsi_target::ct_refcount, cfiscsi_target::ct_softc, cfiscsi_target::ct_state, cfiscsi_target::ct_tag, cfiscsi_target::ct_target_id, CTL_ISCSI_NAME_LEN, cfiscsi_softc::last_target_id, and cfiscsi_softc::lock.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 2363 of file ctl_frontend_iscsi.c.
References cfiscsi_target::ct_refcount.
Referenced by cfiscsi_target_find(), and cfiscsi_target_find_or_create().
|
static |
Definition at line 2370 of file ctl_frontend_iscsi.c.
References CFISCSI_TARGET_STATE_INVALID, cfiscsi_target::ct_port, cfiscsi_target::ct_refcount, cfiscsi_target::ct_softc, cfiscsi_target::ct_state, ctl_port_deregister(), and cfiscsi_softc::lock.
Referenced by cfiscsi_ioctl_handoff(), cfiscsi_ioctl_port_create(), cfiscsi_ioctl_port_remove(), and cfiscsi_session_delete().
|
static |
Definition at line 2953 of file ctl_frontend_iscsi.c.
References cfiscsi_data_wait::cdw_initiator_task_tag, cfiscsi_data_wait_abort(), cfiscsi_pdu_new_response(), cfiscsi_pdu_queue(), CFISCSI_SESSION_DEBUG, CFISCSI_SESSION_LOCK, cfiscsi_session_terminate(), CFISCSI_SESSION_UNLOCK, cfiscsi_session::cs_target, cfiscsi_target::ct_softc, ctl_free_io(), CTL_SUCCESS, CTL_TASK_FUNCTION_COMPLETE, CTL_TASK_FUNCTION_NOT_SUPPORTED, CTL_TASK_FUNCTION_SUCCEEDED, CTL_TASK_LUN_DOES_NOT_EXIST, ctl_io::io_hdr, cfiscsi_softc::lock, PDU_SESSION, PRIV_REQUEST, ctl_io_hdr::status, ctl_taskio::task_resp, ctl_taskio::task_status, and ctl_io::taskio.
Referenced by cfiscsi_done().
CTL_FRONTEND_DECLARE | ( | cfiscsi | , |
cfiscsi_frontend | |||
) |
|
static |
MODULE_DEPEND | ( | cfiscsi | , |
icl | , | ||
1 | , | ||
1 | , | ||
1 | |||
) |
SYSCTL_INT | ( | _kern_cam_ctl_iscsi | , |
OID_AUTO | , | ||
debug | , | ||
CTLFLAG_RWTUN | , | ||
& | debug, | ||
1 | , | ||
"Enable debug messages" | |||
) |
SYSCTL_INT | ( | _kern_cam_ctl_iscsi | , |
OID_AUTO | , | ||
login_timeout | , | ||
CTLFLAG_RWTUN | , | ||
& | login_timeout, | ||
60 | , | ||
"Time to wait for ctld(8) to finish Login | Phase, | ||
in seconds" | |||
) |
SYSCTL_INT | ( | _kern_cam_ctl_iscsi | , |
OID_AUTO | , | ||
maxtags | , | ||
CTLFLAG_RWTUN | , | ||
& | maxtags, | ||
0 | , | ||
"Max number of requests queued by initiator" | |||
) |
SYSCTL_INT | ( | _kern_cam_ctl_iscsi | , |
OID_AUTO | , | ||
ping_timeout | , | ||
CTLFLAG_RWTUN | , | ||
& | ping_timeout, | ||
5 | , | ||
"Interval between ping (NOP-Out) | requests, | ||
in seconds" | |||
) |
SYSCTL_NODE | ( | _kern_cam_ctl | , |
OID_AUTO | , | ||
iscsi | , | ||
CTLFLAG_RD| | CTLFLAG_MPSAFE, | ||
0 | , | ||
"CAM Target Layer iSCSI Frontend" | |||
) |
|
static |
Definition at line 91 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_data_wait_free(), cfiscsi_data_wait_new(), cfiscsi_init(), and cfiscsi_shutdown().
|
static |
Definition at line 194 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_ioctl_port_create().
|
static |
Definition at line 192 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_init(), cfiscsi_ioctl_handoff(), cfiscsi_ioctl_list(), cfiscsi_ioctl_logout(), cfiscsi_ioctl_terminate(), cfiscsi_session_delete(), and cfiscsi_shutdown().
|
static |
Definition at line 95 of file ctl_frontend_iscsi.c.
|
static |
Definition at line 101 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_callout().
|
static |
Definition at line 104 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_pdu_prepare(), and cfiscsi_pdu_update_cmdsn().
|
static |
Definition at line 98 of file ctl_frontend_iscsi.c.
Referenced by cfiscsi_callout().