FreeBSD kernel CAM code
ctl_frontend_iscsi.c File Reference
#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>
Include dependency graph for ctl_frontend_iscsi.c:

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_waitcfiscsi_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_targetcfiscsi_target_find (struct cfiscsi_softc *softc, const char *name, uint16_t tag)
 
static struct cfiscsi_targetcfiscsi_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_sessioncfiscsi_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
 

Macro Definition Documentation

◆ CFISCSI_DEBUG

#define CFISCSI_DEBUG (   X,
  ... 
)
Value:
do { \
if (debug > 1) { \
printf("%s: " X "\n", \
__func__, ## __VA_ARGS__); \
} \
} while (0)
static int debug

Definition at line 108 of file ctl_frontend_iscsi.c.

◆ CFISCSI_SESSION_DEBUG

#define CFISCSI_SESSION_DEBUG (   S,
  X,
  ... 
)
Value:
do { \
if (debug > 1) { \
printf("%s: %s (%s): " X "\n", \
__func__, S->cs_initiator_addr, \
S->cs_initiator_name, ## __VA_ARGS__); \
} \
} while (0)
#define S
Definition: scsi_all.c:139

Definition at line 124 of file ctl_frontend_iscsi.c.

◆ CFISCSI_SESSION_LOCK

#define CFISCSI_SESSION_LOCK (   X)    mtx_lock(&X->cs_lock)

Definition at line 142 of file ctl_frontend_iscsi.c.

◆ CFISCSI_SESSION_LOCK_ASSERT

#define CFISCSI_SESSION_LOCK_ASSERT (   X)    mtx_assert(&X->cs_lock, MA_OWNED)

Definition at line 144 of file ctl_frontend_iscsi.c.

◆ CFISCSI_SESSION_UNLOCK

#define CFISCSI_SESSION_UNLOCK (   X)    mtx_unlock(&X->cs_lock)

Definition at line 143 of file ctl_frontend_iscsi.c.

◆ CFISCSI_SESSION_WARN

#define CFISCSI_SESSION_WARN (   S,
  X,
  ... 
)
Value:
do { \
if (debug > 0) { \
printf("WARNING: %s (%s): " X "\n", \
S->cs_initiator_addr, \
S->cs_initiator_name, ## __VA_ARGS__); \
} \
} while (0)

Definition at line 133 of file ctl_frontend_iscsi.c.

◆ CFISCSI_WARN

#define CFISCSI_WARN (   X,
  ... 
)
Value:
do { \
if (debug > 0) { \
printf("WARNING: %s: " X "\n", \
__func__, ## __VA_ARGS__); \
} \
} while (0)

Definition at line 116 of file ctl_frontend_iscsi.c.

◆ CONN_SESSION

#define CONN_SESSION (   X)    ((struct cfiscsi_session *)(X)->ic_prv0)

Definition at line 146 of file ctl_frontend_iscsi.c.

◆ ISCSI_BHS_OPCODE_INTERNAL

#define ISCSI_BHS_OPCODE_INTERNAL   0x3e

Definition at line 88 of file ctl_frontend_iscsi.c.

◆ PDU_SESSION

#define PDU_SESSION (   X)    CONN_SESSION((X)->ip_conn)

Definition at line 147 of file ctl_frontend_iscsi.c.

◆ PRIV

#define PRIV (   io)     ((struct cfiscsi_priv *)&(io)->io_hdr.ctl_private[CTL_PRIV_FRONTEND])

Definition at line 154 of file ctl_frontend_iscsi.c.

◆ PRIV_EXPDATASN

#define PRIV_EXPDATASN (   io)    PRIV(io)->expdatasn

Definition at line 157 of file ctl_frontend_iscsi.c.

◆ PRIV_R2TSN

#define PRIV_R2TSN (   io)    PRIV(io)->r2tsn

Definition at line 158 of file ctl_frontend_iscsi.c.

◆ PRIV_REQUEST

#define PRIV_REQUEST (   io)    PRIV(io)->request

Definition at line 156 of file ctl_frontend_iscsi.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ cfiscsi_callout()

static void cfiscsi_callout ( void *  context)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_data_wait_abort()

static void cfiscsi_data_wait_abort ( struct cfiscsi_session cs,
struct cfiscsi_data_wait cdw,
int  status 
)
static

◆ cfiscsi_data_wait_free()

static void cfiscsi_data_wait_free ( struct cfiscsi_session cs,
struct cfiscsi_data_wait cdw 
)
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().

Here is the caller graph for this function:

◆ cfiscsi_data_wait_new()

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

◆ cfiscsi_datamove()

static void cfiscsi_datamove ( union ctl_io io)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_datamove_in()

◆ cfiscsi_datamove_out()

◆ cfiscsi_done()

static void cfiscsi_done ( union ctl_io io)
static

◆ cfiscsi_error_callback()

static void cfiscsi_error_callback ( struct icl_conn *  ic)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_handle_data_segment()

◆ cfiscsi_info()

static int cfiscsi_info ( void *  arg,
struct sbuf *  sb 
)
static

Definition at line 1510 of file ctl_frontend_iscsi.c.

References cfiscsi_target::ct_state.

Referenced by cfiscsi_ioctl_port_create().

Here is the caller graph for this function:

◆ cfiscsi_init()

static int cfiscsi_init ( void  )
static

◆ cfiscsi_ioctl()

◆ cfiscsi_ioctl_handoff()

static void cfiscsi_ioctl_handoff ( struct ctl_iscsi ci)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_ioctl_limits()

◆ cfiscsi_ioctl_list()

◆ cfiscsi_ioctl_logout()

◆ cfiscsi_ioctl_port_create()

◆ cfiscsi_ioctl_port_remove()

static void cfiscsi_ioctl_port_remove ( struct ctl_req req)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_ioctl_terminate()

◆ cfiscsi_maintenance_thread()

static void cfiscsi_maintenance_thread ( void *  arg)
static

◆ cfiscsi_offline()

static void cfiscsi_offline ( void *  arg)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_online()

static void cfiscsi_online ( void *  arg)
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().

Here is the caller graph for this function:

◆ cfiscsi_pdu_done()

static void cfiscsi_pdu_done ( struct icl_pdu *  ip,
int  error 
)
static

Definition at line 2451 of file ctl_frontend_iscsi.c.

Referenced by cfiscsi_datamove_in().

Here is the caller graph for this function:

◆ cfiscsi_pdu_handle()

static void cfiscsi_pdu_handle ( struct icl_pdu *  request)
static

◆ cfiscsi_pdu_handle_data_out()

◆ cfiscsi_pdu_handle_logout_request()

static void cfiscsi_pdu_handle_logout_request ( struct icl_pdu *  request)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_pdu_handle_nop_out()

static void cfiscsi_pdu_handle_nop_out ( struct icl_pdu *  request)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_pdu_handle_scsi_command()

◆ cfiscsi_pdu_handle_task_request()

◆ cfiscsi_pdu_new_response()

static struct icl_pdu * cfiscsi_pdu_new_response ( struct icl_pdu *  request,
int  flags 
)
static

◆ cfiscsi_pdu_prepare()

static int cfiscsi_pdu_prepare ( struct icl_pdu *  response)
static

◆ cfiscsi_pdu_queue()

static void cfiscsi_pdu_queue ( struct icl_pdu *  response)
static

◆ cfiscsi_pdu_queue_cb()

static void cfiscsi_pdu_queue_cb ( struct icl_pdu *  response,
icl_pdu_cb  cb 
)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_pdu_update_cmdsn()

static bool cfiscsi_pdu_update_cmdsn ( const struct icl_pdu *  request)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_receive_callback()

static void cfiscsi_receive_callback ( struct icl_pdu *  request)
static

Definition at line 327 of file ctl_frontend_iscsi.c.

References cfiscsi_pdu_handle(), and PDU_SESSION.

Referenced by cfiscsi_session_new().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_scsi_command_done()

◆ cfiscsi_session_delete()

static void cfiscsi_session_delete ( struct cfiscsi_session cs)
static

◆ cfiscsi_session_new()

◆ cfiscsi_session_register_initiator()

static int cfiscsi_session_register_initiator ( struct cfiscsi_session cs)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_session_terminate()

◆ cfiscsi_session_terminate_tasks()

◆ cfiscsi_session_unregister_initiator()

static void cfiscsi_session_unregister_initiator ( struct cfiscsi_session cs)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_shutdown()

static int cfiscsi_shutdown ( void  )
static

◆ cfiscsi_target_find()

static struct cfiscsi_target * cfiscsi_target_find ( struct cfiscsi_softc softc,
const char *  name,
uint16_t  tag 
)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfiscsi_target_find_or_create()

static struct cfiscsi_target * cfiscsi_target_find_or_create ( struct cfiscsi_softc softc,
const char *  name,
const char *  alias,
uint16_t  tag 
)
static

◆ cfiscsi_target_hold()

static void cfiscsi_target_hold ( struct cfiscsi_target ct)
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().

Here is the caller graph for this function:

◆ cfiscsi_target_release()

static void cfiscsi_target_release ( struct cfiscsi_target ct)
static

◆ cfiscsi_task_management_done()

◆ CTL_FRONTEND_DECLARE()

CTL_FRONTEND_DECLARE ( cfiscsi  ,
cfiscsi_frontend   
)

◆ MALLOC_DEFINE()

static MALLOC_DEFINE ( M_CFISCSI  ,
"cfiscsi"  ,
"Memory used for CTL iSCSI frontend"   
)
static

◆ MODULE_DEPEND()

MODULE_DEPEND ( cfiscsi  ,
icl  ,
,
,
 
)

◆ SYSCTL_INT() [1/4]

SYSCTL_INT ( _kern_cam_ctl_iscsi  ,
OID_AUTO  ,
debug  ,
CTLFLAG_RWTUN  ,
debug,
,
"Enable debug messages"   
)

◆ SYSCTL_INT() [2/4]

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() [3/4]

SYSCTL_INT ( _kern_cam_ctl_iscsi  ,
OID_AUTO  ,
maxtags  ,
CTLFLAG_RWTUN  ,
maxtags,
,
"Max number of requests queued by initiator"   
)

◆ SYSCTL_INT() [4/4]

SYSCTL_INT ( _kern_cam_ctl_iscsi  ,
OID_AUTO  ,
ping_timeout  ,
CTLFLAG_RWTUN  ,
ping_timeout,
,
"Interval between ping (NOP-Out)  requests,
in seconds"   
)

◆ SYSCTL_NODE()

SYSCTL_NODE ( _kern_cam_ctl  ,
OID_AUTO  ,
iscsi  ,
CTLFLAG_RD|  CTLFLAG_MPSAFE,
,
"CAM Target Layer iSCSI Frontend"   
)

Variable Documentation

◆ cfiscsi_data_wait_zone

uma_zone_t cfiscsi_data_wait_zone
static

◆ cfiscsi_frontend

struct ctl_frontend cfiscsi_frontend
static
Initial value:
=
{
.name = "iscsi",
.init = cfiscsi_init,
.ioctl = cfiscsi_ioctl,
.shutdown = cfiscsi_shutdown,
}
static int cfiscsi_shutdown(void)
static int cfiscsi_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
static int cfiscsi_init(void)

Definition at line 194 of file ctl_frontend_iscsi.c.

Referenced by cfiscsi_ioctl_port_create().

◆ cfiscsi_softc

◆ debug

int debug = 1
static

Definition at line 95 of file ctl_frontend_iscsi.c.

◆ login_timeout

int login_timeout = 60
static

Definition at line 101 of file ctl_frontend_iscsi.c.

Referenced by cfiscsi_callout().

◆ maxtags

int maxtags = 256
static

Definition at line 104 of file ctl_frontend_iscsi.c.

Referenced by cfiscsi_pdu_prepare(), and cfiscsi_pdu_update_cmdsn().

◆ ping_timeout

int ping_timeout = 5
static

Definition at line 98 of file ctl_frontend_iscsi.c.

Referenced by cfiscsi_callout().