Update to version 2.3.1.0

Obtained from:	Daniel Braniss <danny@cs.huji.ac.il>
This commit is contained in:
Josh Paetzel 2012-04-13 18:21:56 +00:00
parent d591b27dbc
commit c4d87335a8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=234233
10 changed files with 176 additions and 42 deletions

View file

@ -8,7 +8,7 @@ S= ${.CURDIR}/../../sys
WARNS?= 3
CFLAGS += -I$S
#CFLAGS += -g -DDEBUG
CFLAGS += -g -DDEBUG
MAN= iscsi.conf.5 iscontrol.8

View file

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd February 22, 2007
.Dd August 9, 2010
.Dt ISCONTROL 8
.Os
.Sh NAME

View file

@ -56,6 +56,8 @@ __FBSDID("$FreeBSD$");
#include <dev/iscsi/initiator/iscsi.h>
#include "iscontrol.h"
static char version[] = "2.3.1"; // keep in sync with iscsi_initiator
#define USAGE "[-v] [-d] [-c config] [-n name] [-t target] [-p pidfile]"
#define OPTIONS "vdc:t:n:p:"
@ -124,9 +126,10 @@ int
main(int cc, char **vv)
{
int ch, disco;
char *pname, *pidfile, *p, *q, *ta, *kw;
char *pname, *pidfile, *p, *q, *ta, *kw, *v;
isc_opt_t *op;
FILE *fd;
size_t n;
op = &opvals;
iscsidev = "/dev/"ISCSIDEV;
@ -138,6 +141,21 @@ main(int cc, char **vv)
kw = ta = 0;
disco = 0;
pidfile = NULL;
/*
| check for driver & controller version match
*/
n = 0;
if(sysctlbyname("net.iscsi_initiator.driver_version", 0, &n, 0, 0) != 0)
perror("sysctlbyname");
v = malloc(n+1);
if(sysctlbyname("net.iscsi_initiator.driver_version", v, &n, 0, 0) != 0)
perror("sysctlbyname");
if(strncmp(version, v, 3)) {
fprintf(stderr, "versions missmatch\n");
exit(1);
}
while((ch = getopt(cc, vv, OPTIONS)) != -1) {
switch(ch) {

View file

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd February 25, 2012
.Dd June 5, 2007
.Dt ISCSI.CONF 5
.Os
.Sh NAME

View file

@ -1,4 +1,4 @@
.\" Copyright (c) 2007 Daniel Braniss <danny@cs.huji.ac.il>
.\" Copyright (c) 2007-2010 Daniel Braniss <danny@cs.huji.ac.il>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@ -24,9 +24,9 @@
.\"
.\" $FreeBSD$
.\"
.Dd May 9, 2010
.Dt ISCSI_INITIATOR 4
.Dd August 3, 2010
.Os
.Dt ISCSI_INITIATOR 4
.Sh NAME
.Nm iscsi_initiator
.Nd kernel driver for the iSCSI protocol
@ -48,38 +48,36 @@ iscsi_initiator_load="YES"
The
.Nm
implements the kernel side of the Internet SCSI (iSCSI) network
protocol standard.
The userland companion is
protocol standard, the user land companion is
.Xr iscontrol 8 ,
and permits access to remote
.Em virtual
SCSI devices via
.Xr cam 4 .
.Sh SYSCTL VARIABLES
.Bl -tag -width "net.iscsi.n.targedaddress"
.Bl -tag -width ".Va net.iscsi.n.targeaddress"
.It Va debug.iscsi_initiator
set the debug-level, 0 means no debugging, 9 for maximum.
.It Va net.iscsi.isid
the initiator part of the Session Identifier.
.El
.Pp
The following are informative only:
.Bl -tag -width "net.iscsi.n.targedaddress"
.It Va "kern.cam.cam_srch_hi=1"
allow search above LUN 7 for SCSI3 and greater devices.
.It "the following are informative only:"
.It Va net.iscsi.driver_version
the current version of the driver.
.It Va net.iscsi.sessions
the number of current active sessions.
.It Va net.iscsi.n.targetname
the target name of session
is the targe name of session
.Em n .
.It Va net.iscsi.n.targedaddress
the IP address of the target of session
.It Va net.iscsi.n.targeaddress
is the IP address of the target of session
.Em n .
.It Va net.iscsi.n.stats
statistics for session
.Em n
are some statistics for session
.EM n
.It Va net.iscsi.n.pid
the
is the
.Em "process id"
of the userland side of session
.Em n ,
@ -87,11 +85,11 @@ see
.Xr iscontrol 8 .
.El
.Sh FILES
The
The
.Nm
driver creates the following:
.Pp
.Bl -tag -width ".Pa /dev/iscsi%dxx" -compact
.Pp
.It Pa /dev/iscsi
used to create new sessions.
.It Pa /dev/iscsi%d
@ -105,5 +103,6 @@ for each new session.
iSCSI RFC 3720
.\" .Sh HISTORY
.\" .Sh AUTHORS
This software was written by Daniel Braniss <danny@cs.huji.ac.il>
.Sh BUGS
The lun discovery method is old-fashioned.

View file

@ -1,5 +1,5 @@
/*-
* Copyright (c) 2005-2010 Daniel Braniss <danny@cs.huji.ac.il>
* Copyright (c) 2005-2011 Daniel Braniss <danny@cs.huji.ac.il>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -77,6 +77,104 @@ i_strdupin(char *s, size_t maxlen)
return q;
}
#if __FreeBSD_version < 800000
/*****************************************************************/
/* */
/* CRC LOOKUP TABLE */
/* ================ */
/* The following CRC lookup table was generated automagically */
/* by the Rocksoft^tm Model CRC Algorithm Table Generation */
/* Program V1.0 using the following model parameters: */
/* */
/* Width : 4 bytes. */
/* Poly : 0x1EDC6F41L */
/* Reverse : TRUE. */
/* */
/* For more information on the Rocksoft^tm Model CRC Algorithm, */
/* see the document titled "A Painless Guide to CRC Error */
/* Detection Algorithms" by Ross Williams */
/* (ross@guest.adelaide.edu.au.). This document is likely to be */
/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */
/* */
/*****************************************************************/
static uint32_t crc32Table[256] = {
0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
};
static __inline int
calculate_crc32c(uint32_t crc, const void *buf, size_t size)
{
const uint8_t *p = buf;
while (size--)
crc = crc32Table[(crc ^ *p++) & 0xff] ^ (crc >> 8);
return crc;
}
#endif
static uint32_t
i_crc32c(const void *buf, size_t size, uint32_t crc)

View file

@ -1,5 +1,5 @@
/*-
* Copyright (c) 2005-2010 Daniel Braniss <danny@cs.huji.ac.il>
* Copyright (c) 2005-2011 Daniel Braniss <danny@cs.huji.ac.il>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -60,7 +60,7 @@ __FBSDID("$FreeBSD$");
#include <dev/iscsi/initiator/iscsi.h>
#include <dev/iscsi/initiator/iscsivar.h>
static char *iscsi_driver_version = "2.2.4.2";
static char *iscsi_driver_version = "2.3.1";
static struct isc_softc *isc;
@ -231,8 +231,8 @@ iscsi_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int mode, struct thread *
if(error == 0) {
sp->proc = td->td_proc;
SYSCTL_ADD_INT(&sp->clist, SYSCTL_CHILDREN(sp->oid),
OID_AUTO, "pid", CTLFLAG_RD,
&sp->proc->p_pid, sizeof(pid_t), "control process id");
OID_AUTO, "pid", CTLFLAG_RD,
&sp->proc->p_pid, sizeof(pid_t), "control process id");
}
break;
@ -290,8 +290,7 @@ iscsi_read(struct cdev *dev, struct uio *uio, int ioflag)
sprintf(buf, "%03d] '%s' '%s'\n", i++, sp->opt.targetAddress, sp->opt.targetName);
uiomove(buf, strlen(buf), uio);
}
sprintf(buf, "%d/%d /---- free -----/\n", sc->npdu_alloc, sc->npdu_max);
i = 0;
sprintf(buf, "free npdu_alloc=%d, npdu_max=%d\n", sc->npdu_alloc, sc->npdu_max);
uiomove(buf, strlen(buf), uio);
}
else {
@ -696,7 +695,6 @@ iscsi_shutdown(void *v)
static void
free_pdus(struct isc_softc *sc)
{
debug_called(8);
if(sc->pdu_zone != NULL) {
@ -777,6 +775,10 @@ iscsi_start(void)
sizeof(isc->nsess),
"number of active session");
#ifdef ISCSI_INITIATOR_DEBUG
mtx_init(&iscsi_dbg_mtx, "iscsi_dbg", NULL, MTX_DEF);
#endif
printf("iscsi: version %s\n", iscsi_driver_version);
}
@ -814,6 +816,11 @@ iscsi_stop(void)
xdebug("sysctl_ctx_free failed");
iscsi_shutdown(isc); // XXX: check EVENTHANDLER_ ...
#ifdef ISCSI_INITIATOR_DEBUG
mtx_destroy(&iscsi_dbg_mtx);
#endif
free(isc, M_ISCSI);
}

View file

@ -154,7 +154,7 @@ getSenseData(u_int status, union ccb *ccb, pduq_t *pq)
scsi_rsp_t *cmd = &pp->ipdu.scsi_rsp;
caddr_t bp;
int sense_len, mustfree = 0;
int error_code, sense_key, asc, ascq;
int error_code, sense_key, asc, ascq;
bp = mtod(pq->mp, caddr_t);
if((sense_len = scsi_2btoul(bp)) == 0)
@ -176,9 +176,8 @@ getSenseData(u_int status, union ccb *ccb, pduq_t *pq)
scsi->sense_resid = 0;
if(cmd->flag & (BIT(1)|BIT(2)))
scsi->sense_resid = ntohl(pp->ipdu.scsi_rsp.rcnt);
scsi_extract_sense_len(sense, scsi->sense_len - scsi->sense_resid,
&error_code, &sense_key, &asc, &ascq, /*show_errors*/ 1);
&error_code, &sense_key, &asc, &ascq, /*show_errors*/ 1);
debug(3, "sense_len=%d rcnt=%d sense_resid=%d dsl=%d error_code=%x flags=%x",
sense_len,
@ -479,6 +478,8 @@ scsi_encap(struct cam_sim *sim, union ccb *ccb)
cmd = &pq->pdu.ipdu.scsi_req;
cmd->opcode = ISCSI_SCSI_CMD;
cmd->F = 1;
#if 0
// this breaks at least Isilon's iscsi target.
/*
| map tag option, default is UNTAGGED
*/
@ -488,6 +489,9 @@ scsi_encap(struct cam_sim *sim, union ccb *ccb)
case MSG_ORDERED_Q_TAG: cmd->attr = iSCSI_TASK_ORDER; break;
case MSG_ACA_TASK: cmd->attr = iSCSI_TASK_ACA; break;
}
#else
cmd->attr = iSCSI_TASK_SIMPLE;
#endif
dwl(sp, ccb_h->target_lun, (u_char *)&cmd->lun);

View file

@ -1,5 +1,5 @@
/*-
* Copyright (c) 2005-2010 Daniel Braniss <danny@cs.huji.ac.il>
* Copyright (c) 2005-2011 Daniel Braniss <danny@cs.huji.ac.il>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -203,6 +203,8 @@ struct isc_softc {
struct sx unit_sx;
uma_zone_t pdu_zone; // pool of free pdu's
TAILQ_HEAD(,pduq) freepdu;
#ifdef ISCSI_INITIATOR_DEBUG
int npdu_alloc, npdu_max; // for instrumentation
#endif
@ -305,9 +307,11 @@ pdu_alloc(struct isc_softc *isc, int wait)
return NULL;
}
#ifdef ISCSI_INITIATOR_DEBUG
mtx_lock(&iscsi_dbg_mtx);
isc->npdu_alloc++;
if(isc->npdu_alloc > isc->npdu_max)
isc->npdu_max = isc->npdu_alloc;
mtx_unlock(&iscsi_dbg_mtx);
#endif
memset(pq, 0, sizeof(pduq_t));
@ -322,11 +326,13 @@ pdu_free(struct isc_softc *isc, pduq_t *pq)
#ifdef NO_USE_MBUF
if(pq->buf != NULL)
free(pq->buf, M_ISCSIBUF);
#endif
#ifdef ISCSI_INITIATOR_DEBUG
isc->npdu_alloc--;
#endif
uma_zfree(isc->pdu_zone, pq);
#ifdef ISCSI_INITIATOR_DEBUG
mtx_lock(&iscsi_dbg_mtx);
isc->npdu_alloc--;
mtx_unlock(&iscsi_dbg_mtx);
#endif
}
static __inline void

View file

@ -1,14 +1,16 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../../dev/iscsi/initiator
S= ${.CURDIR}/../../..
.PATH: $S/dev/iscsi/initiator
KMOD=iscsi_initiator
SRCS= iscsi.h iscsivar.h
SRCS+= iscsi.c isc_cam.c isc_soc.c isc_sm.c isc_subr.c iscsi_subr.c
SRCS+= opt_cam.h opt_iscsi_initiator.h
SRCS+= bus_if.h device_if.h
# Debugging
# CFLAGS+= -DISCSI_INITIATOR_DEBUG=9
#CFLAGS+= -DNO_USE_MBUF
CFLAGS+= -DISCSI_INITIATOR_DEBUG=2
CFLAGS+= -I$S
CFLAGS+= -DINVARIANTS
.include <bsd.kmod.mk>