Module Name: src Committed By: sborrill Date: Wed May 30 08:06:26 UTC 2012
Modified Files: src/etc [netbsd-6]: MAKEDEV.tmpl src/sbin/iscsictl [netbsd-6]: iscsictl.8 src/sbin/iscsid [netbsd-6]: Makefile iscsid.8 iscsid.h iscsid_driverif.c iscsid_globals.h iscsid_lists.c iscsid_main.c iscsid_targets.c src/sys/dev/iscsi [netbsd-6]: iscsi_main.c Log Message: Pull up the following revisions(s) (requested by riz in ticket #291): etc/MAKEDEV.tmpl: revision 1.155 sbin/iscsictl/iscsictl.8: revision 1.2-1.4 sbin/iscsid/iscsid_driverif.c: revision 1.4-1.5 sbin/iscsid/iscsid_lists.c: revision 1.4-1.7 sbin/iscsid/iscsid_targets.c: revision 1.4 sbin/iscsid/iscsid_globals.h: revision 1.5-1.7 sbin/iscsid/iscsid_main.c: revision 1.4-1.7 sbin/iscsid/Makefile: revision 1.2-1.4 sbin/iscsid/iscsid.8: revision 1.3-1.8 sbin/iscsid/iscsid.h: revision 1.3 sys/dev/iscsi/iscsi_main.c: revision 1.2-1.3 Fix bugs in iscsid target list handling, and improve documentation somewhat for the in-kernel iSCSI initiator. To generate a diff of this commit: cvs rdiff -u -r1.151.2.1 -r1.151.2.2 src/etc/MAKEDEV.tmpl cvs rdiff -u -r1.1 -r1.1.4.1 src/sbin/iscsictl/iscsictl.8 cvs rdiff -u -r1.1 -r1.1.4.1 src/sbin/iscsid/Makefile cvs rdiff -u -r1.2 -r1.2.2.1 src/sbin/iscsid/iscsid.8 cvs rdiff -u -r1.2 -r1.2.4.1 src/sbin/iscsid/iscsid.h cvs rdiff -u -r1.3 -r1.3.2.1 src/sbin/iscsid/iscsid_driverif.c \ src/sbin/iscsid/iscsid_lists.c src/sbin/iscsid/iscsid_main.c \ src/sbin/iscsid/iscsid_targets.c cvs rdiff -u -r1.4 -r1.4.2.1 src/sbin/iscsid/iscsid_globals.h cvs rdiff -u -r1.1 -r1.1.8.1 src/sys/dev/iscsi/iscsi_main.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/etc/MAKEDEV.tmpl diff -u src/etc/MAKEDEV.tmpl:1.151.2.1 src/etc/MAKEDEV.tmpl:1.151.2.2 --- src/etc/MAKEDEV.tmpl:1.151.2.1 Sat Feb 25 14:48:12 2012 +++ src/etc/MAKEDEV.tmpl Wed May 30 08:06:26 2012 @@ -1,5 +1,5 @@ #!/bin/sh - -# $NetBSD: MAKEDEV.tmpl,v 1.151.2.1 2012/02/25 14:48:12 sborrill Exp $ +# $NetBSD: MAKEDEV.tmpl,v 1.151.2.2 2012/05/30 08:06:26 sborrill Exp $ # # Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc. # All rights reserved. @@ -810,6 +810,7 @@ all) makedev md0 md1 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7 makedev vnd0 vnd1 vnd2 vnd3 + makedev iscsi0 makedev bpf npf makedev tun0 tun1 tun2 tun3 makedev ipl pf crypto random Index: src/sbin/iscsictl/iscsictl.8 diff -u src/sbin/iscsictl/iscsictl.8:1.1 src/sbin/iscsictl/iscsictl.8:1.1.4.1 --- src/sbin/iscsictl/iscsictl.8:1.1 Sun Oct 23 21:11:23 2011 +++ src/sbin/iscsictl/iscsictl.8 Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -.\" $NetBSD: iscsictl.8,v 1.1 2011/10/23 21:11:23 agc Exp $ +.\" $NetBSD: iscsictl.8,v 1.1.4.1 2012/05/30 08:06:26 sborrill Exp $ .\" .\" Copyright (c) 2011 Alistair Crooks <a...@netbsd.org> .\" All rights reserved. @@ -23,7 +23,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd August 8, 2011 +.Dd May 26, 2012 .Dt ISCSICTL 8 .Os .Sh NAME @@ -31,8 +31,7 @@ .Nd program to manage iSCSI instances .Sh SYNOPSIS .Nm -.Op Fl v -.Op Fl d Ar directory +.Op Fl d Ar sockdir .Ar command .Op Ar arguments ... .Sh DESCRIPTION @@ -75,20 +74,112 @@ command is used; this creates a session The sessions can be listed by using the .Dv list_sessions command. -.Pp +.Ss Global Options +.Bl -tag width xdxsockdirx +.It Fl d Ar sockdir +Specify the directory where the socket for +.Xr iscsid 8 +lives. +.El +.Ss Target Address Specification +The target address specification for the +.Ic add_target +and +.Ic add_send_target +commands may include a target name, target address (IP or FQDN), +TCP port, and group tag. +Either the target address or target name is required. +(For add_send_target, a target address is required). +The address, port, and group tag may optionally be repeated. +.Bl -tag -width xaxtarget-addressx +.It Fl a Ar target-address +Specify the target address by IP or FQDN. +.It Fl n Ar target-name +Specify the target by name. +.It Fl p Ar port-num +The TCP port to connect to the target on. +(Default port is 3260) +.It Fl g Ar group-tag +The group tag, a 16-bit integer. +.El +.Ss Portal Address Specification +The portal address specification for the +.Ic add_portal +command may include an address (IP or FQDN), port, and group tag, plus +portal options. +.Bl -tag -width xaxtarget-addressx +.It Fl a Ar target-address +Specify the target address by IP or FQDN. +.It Fl p Ar port-num +The TCP port to connect to the target on. +(Default port is 3260) +.It Fl g Ar group-tag +The group tag, a 16-bit integer. +.It Fl h +Use a CRC32 header digest. +.It Fl d +Use a CRC32 data digest. +.It Fl l Ar segment-length +Specify the max received data segment length. +.El +.Ss Target Options +Target options are as follows: +.Bl -tag -width xlxsegment-lengthx +.It Fl h +Use a CRC32 header digest. +.It Fl d +Use a CRC32 data digest. +.It Fl w Ar time +Time to wait. +.It Fl r Ar time +Time to retain. +.It Fl e Ar level +Error recovery level. +.It Fl l Ar segment-length +Specify the max received data segment length. +.El +.Ss Authentication Options +Authentication options are as follows: +.Bl -tag width 5n +.It Fl t Ar type +Specify authentication type. +.Ar n +indicates no authentication, while +.Ar c +indicates CHAP authentication, and +.Ar C +indicates Mutual CHAP authentication. +.It Fl u Ar name +User name. +.It Fl s Ar secret +Initiator secret. +.It Fl S Ar secret +Target secret. +.El +.Ss Nm Commands The .Nm command argument is taken from one of the following options: -.Bl -tag -width XCXremove_send_targetXX -.It version -return the version number of the -.Nm -utility -.It add_target -.It add_portal -.It remove_target -.It slp_find_targets -.It refresh_targets +.Bl -tag -width 5n +.It Cm version +return version information from the +.Nm +utility and the +.Xr iscsid 8 +daemon. +.It Cm add_target Ar target-address-spec Oo Ar target-opts Oc Oo Ar auth-opts Oc Oo Fl N Ar symbolic-name Oc +A +.Ar target-address-spec +may include name, address, port, and group tag, with address/port/tag +possibly repeated. +.It Cm add_portal Ar portal-address-spec Oo Fl I target-id Oc Oo Fl N symbolic-name Oc +Add a portal to the list of portals. +.It Cm remove_target Fl I Ar target-id +.It Cm remove_target Fl n Ar target-name +Remove a target by name or ID. +.It Cm slp_find_targets +Not implemented. +.It Cm refresh_targets Op Fl I Ar target-id this command causes the iSCSI initiator to refresh its view of the iSCSI targets to which it is connected. If this command completes successfully, an @@ -96,8 +187,9 @@ If this command completes successfully, value is printed. For more context on the exact usage of this command, please see the example below. -.It list_targets -.It add_send_target +.It Cm list_targets +Display a list of targets the iSCSI initiator knows about. +.It Cm add_send_target Fl a Ar target-address Oo Ar target-address-spec Oc Oo Ar target-opts Oc Oo Ar auth-opts Oc Oo Fl N Ar symbolic-name Oc this command allows the iSCSI initiator to connect to an iSCSI target. The subsequent @@ -107,14 +199,22 @@ This can be provided as a numerical IP a or as a textual FQDN. For more context on the exact usage of this command, please see the example below. -.It remove_send_target -.It list_send_targets -.It add_isns_server -.It remove_isns_server -.It find_isns_servers -.It list_isns_servers -.It refresh_isns -.It login +.It Cm remove_send_target Fl I Ar target-id +.It Cm remove_send_target Fl n Ar target-name +Remove a send target from the list by name or +.Ar target-id +.It Cm list_send_targets +Display the list of send targets configured. +.It Cm add_isns_server Ar iSNS-address-spec +Add an iSNS server using an address specification that may include name, +address, and port. +.It Cm remove_isns_server Fl I Ar isns-server-id +.It Cm remove_isns_server Fl a Ar isns-server-address +.It Cm find_isns_servers +Not Implemented. +.It Cm list_isns_servers +.It Cm refresh_isns Op Fl I Ar id +.It Cm login Oo Fl m Oc Oo Ar target-opts Oc Oo Ar auth-opts Oc Oo Fl P Ar portal-id Oc To be able to communicate with the iSCSI target, the initiator must login. This command allows this login to take place. @@ -127,30 +227,42 @@ session which has been created will be d number. For more context on the exact usage of this command, please see the example below. -.It logout -.It add_connection -.It remove_connection -.It inquiry -.It read_capacity -.It report_luns -.It test_unit_ready -.It add_initiator -.It remove_initiator -.It list_initiators -.It list_sessions +.It Cm logout Op Fl I Ar session-id +.It Cm add_connection Oo Fl m Oc Oo Ar target-opts Oc Oo Ar auth-opts Oc Oo Fl P Ar portal-id Oc +.It Cm remove_connection Fl I Ar session-id Fl C Ar connection-id +.It Cm inquiry Oo Fl l Ar lun Oc Oo Fl d Ar detail Oc Oo Fl p Ar pag Oc +.It Cm read_capacity Op Fl I Ar session-id Op Fl l Ar lun +.It Cm report_luns Op Fl I Ar session-id +.It Cm test_unit_ready Op Fl I Ar session-id +.It Cm add_initiator Fl a Ar interface-address Op Fl N Ar symbolic-name +.It Cm remove_initiator Fl I Ar portal-id +.It Cm list_initiators +.It Cm list_sessions Op Fl c Once login to the target has taken place, a session will have been created. To list the session information, this command is used. The session number and target information for each of the targets are displayed. +If the +.Fl c +flag is used, connection information is displayed as well. For more context on the exact usage of this command, please see the example below. -.It set_node_name +.It Cm set_node_name Fl n Ar initiator-name Oo Fl A alias Oc Oo Fl i Ar isid Oc +Set the initiator name. +The default initiator name is +iqn.1994-04.org.netbsd:iscsi.<hostname>:<hostid> . +An +.Ar alias +can be specified as well as an +.Ar isid .El .Sh EXAMPLES .Nm is intended to be used as follows: .Pp The initiator itself can be loaded as a kernel module, and works successfully -on 2.0 (the host called "burner"), running against the NetBSD target on a 5.99 host. +on 2.0 (the host called "burner"), running against the +.Nx +target on a 5.99 host. .Pp .Bd -literal burner# modload -v -s -p /usr/lkm/iscsi_post.sh /usr/lkm/iscsidrv.o Index: src/sbin/iscsid/Makefile diff -u src/sbin/iscsid/Makefile:1.1 src/sbin/iscsid/Makefile:1.1.4.1 --- src/sbin/iscsid/Makefile:1.1 Sun Oct 23 21:11:23 2011 +++ src/sbin/iscsid/Makefile Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 2011/10/23 21:11:23 agc Exp $ +# $NetBSD: Makefile,v 1.1.4.1 2012/05/30 08:06:26 sborrill Exp $ PROG= iscsid @@ -13,8 +13,6 @@ MAN= iscsid.8 WARNS= 4 -# CPPFLAGS+= -DISCSI_DEBUG - LDADD = -lpthread -lisns INCSDIR= /usr/include Index: src/sbin/iscsid/iscsid.8 diff -u src/sbin/iscsid/iscsid.8:1.2 src/sbin/iscsid/iscsid.8:1.2.2.1 --- src/sbin/iscsid/iscsid.8:1.2 Mon Nov 21 08:23:20 2011 +++ src/sbin/iscsid/iscsid.8 Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -.\" $NetBSD: iscsid.8,v 1.2 2011/11/21 08:23:20 njoly Exp $ +.\" $NetBSD: iscsid.8,v 1.2.2.1 2012/05/30 08:06:26 sborrill Exp $ .\" .\" Copyright (c) 2011 Alistair Crooks <a...@netbsd.org> .\" All rights reserved. @@ -23,7 +23,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd August 8, 2011 +.Dd May 27, 2012 .Dt ISCSID 8 .Os .Sh NAME @@ -31,6 +31,8 @@ .Nd interface to kernel iSCSI driver .Sh SYNOPSIS .Nm +.Op Fl n +.Op Fl d Ar lvl .Sh DESCRIPTION The iSCSI initiator runs as a kernel driver, and provides access to iSCSI targets running across a network using the iSCSI protocol, @@ -56,8 +58,16 @@ exits on receiving a terminate message, (no response to one that is sent to the kernel), or when an error occurs reading from or writing to the socket. .Pp -There are no command line arguments to -.Nm . +The +.Fl d +flag increases the debug level to +.Ar lvl . +Any level above 0 causes +.Nm +to remain in the foreground, and increases the amount of debug output. +The +.Fl n +flag makes the daemon single-threaded. .Pp It is envisaged that user-level communication take place with .Nm Index: src/sbin/iscsid/iscsid.h diff -u src/sbin/iscsid/iscsid.h:1.2 src/sbin/iscsid/iscsid.h:1.2.4.1 --- src/sbin/iscsid/iscsid.h:1.2 Sat Oct 29 16:54:49 2011 +++ src/sbin/iscsid/iscsid.h Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid.h,v 1.2 2011/10/29 16:54:49 christos Exp $ */ +/* $NetBSD: iscsid.h,v 1.2.4.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2004,2006,2011 The NetBSD Foundation, Inc. @@ -908,6 +908,8 @@ typedef struct { Corresponding version information for driver. */ +extern int nothreads; + __END_DECLS #endif /* !_ISCSID_H_ */ Index: src/sbin/iscsid/iscsid_driverif.c diff -u src/sbin/iscsid/iscsid_driverif.c:1.3 src/sbin/iscsid/iscsid_driverif.c:1.3.2.1 --- src/sbin/iscsid/iscsid_driverif.c:1.3 Sun Nov 20 01:23:57 2011 +++ src/sbin/iscsid/iscsid_driverif.c Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_driverif.c,v 1.3 2011/11/20 01:23:57 agc Exp $ */ +/* $NetBSD: iscsid_driverif.c,v 1.3.2.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -192,8 +192,8 @@ make_connection(session_t * sess, iscsid struct hostent *host; initiator_t *init; - DEB(9, ("Make Connection sess=%x, req=%x, res=%x, stid=%x\n", - (int) sess, (int) req, (int) res, (int) stid)); + DEB(9, ("Make Connection sess=%p, req=%p, res=%p, stid=%p\n", + sess, req, res, stid)); (void) memset(&loginp, 0x0, sizeof(loginp)); (void) memset(&serverAddress, 0x0, sizeof(serverAddress)); @@ -923,11 +923,10 @@ event_handler(void *par) evtp.event_id = event_reg.event_id; do { -#ifndef ISCSI_NOTHREAD - rc = ioctl(driver, ISCSI_WAIT_EVENT, &evtp); -#else - rc = ioctl(driver, ISCSI_POLL_EVENT, &evtp); -#endif + if (nothreads) + rc = ioctl(driver, ISCSI_POLL_EVENT, &evtp); + else + rc = ioctl(driver, ISCSI_WAIT_EVENT, &evtp); if (rc || evtp.status) break; @@ -953,9 +952,7 @@ event_handler(void *par) } } while (evtp.event_kind != ISCSI_DRIVER_TERMINATING); -#ifdef ISCSI_NOTHREAD - if (evtp.event_kind == ISCSI_DRIVER_TERMINATING) -#endif + if (nothreads && evtp.event_kind == ISCSI_DRIVER_TERMINATING) exit_daemon(); return NULL; Index: src/sbin/iscsid/iscsid_lists.c diff -u src/sbin/iscsid/iscsid_lists.c:1.3 src/sbin/iscsid/iscsid_lists.c:1.3.2.1 --- src/sbin/iscsid/iscsid_lists.c:1.3 Sun Nov 20 01:23:57 2011 +++ src/sbin/iscsid/iscsid_lists.c Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_lists.c,v 1.3 2011/11/20 01:23:57 agc Exp $ */ +/* $NetBSD: iscsid_lists.c,v 1.3.2.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -37,7 +37,6 @@ static uint32_t initiator_id = 0; /* -------------------------------------------------------------------------- */ -/*#ifdef ISCSI_NOTHREAD */ #if 0 /* @@ -233,9 +232,9 @@ find_TargetName(iscsid_list_kind_t lst, break; } - DEB(10, ("Find_TagetName returns %p\n", curr)); - - return t; + /* return curr instead of t because curr==NULL if name not found */ + DEB(10, ("Find_TargetName returns %p\n", curr)); + return (target_t *)curr; } @@ -256,10 +255,10 @@ find_portal_by_addr(target_t * target, i TAILQ_FOREACH(curr, &list[PORTAL_LIST].list, link) { p = (void *)curr; - DEB(10, ("Find_portal_by_addr - addr %s port %d target %x\n", + DEB(10, ("Find_portal_by_addr - addr %s port %d target %p\n", p->addr.address, p->addr.port, - (int) p->target)); + p->target)); if (strcmp((char *)p->addr.address, (char *)addr->address) == 0 && (!addr->port || p->addr.port == addr->port) && @@ -267,8 +266,9 @@ find_portal_by_addr(target_t * target, i break; } + /* return curr instead of p because curr==NULL if not found */ DEB(10, ("Find_portal_by_addr returns %p\n", curr)); - return p; + return (portal_t *)curr; } @@ -294,8 +294,9 @@ find_send_target_by_addr(iscsi_portal_ad break; } + /* return curr instead of p because curr==NULL if not found */ DEB(10, ("Find_send_target_by_addr returns %p\n", curr)); - return t; + return (send_target_t *)curr; } @@ -695,8 +696,9 @@ find_initiator_by_addr(uint8_t * addr) break; } + /* return curr instead of i because if not found, curr==NULL */ DEB(9, ("Find_initiator_by_addr returns %p\n", curr)); - return i; + return (initiator_t *)curr; } Index: src/sbin/iscsid/iscsid_main.c diff -u src/sbin/iscsid/iscsid_main.c:1.3 src/sbin/iscsid/iscsid_main.c:1.3.2.1 --- src/sbin/iscsid/iscsid_main.c:1.3 Sun Nov 20 01:23:57 2011 +++ src/sbin/iscsid/iscsid_main.c Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_main.c,v 1.3 2011/11/20 01:23:57 agc Exp $ */ +/* $NetBSD: iscsid_main.c,v 1.3.2.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -37,6 +37,7 @@ #include <sys/sysctl.h> #include <ctype.h> +#include <err.h> #include <fcntl.h> #define DEVICE "/dev/iscsi0" @@ -45,17 +46,17 @@ list_head_t list[NUM_DAEMON_LISTS]; /* the lists this daemon keeps */ -#ifndef ISCSI_NOTHREAD pthread_mutex_t sesslist_lock; /* session list lock */ pthread_t event_thread; /* event thread handle */ -#endif int driver = -1; /* the driver's file desc */ int client_sock; /* the client communication socket */ -#ifdef ISCSI_DEBUG -int debug_level = ISCSI_DEBUG; /* How much info to display */ +#ifndef ISCSI_DEBUG +#define ISCSI_DEBUG 0 #endif +int debug_level = ISCSI_DEBUG; /* How much info to display */ +int nothreads; /* To avoid memory fragmentation (and speed things up a bit), we use the @@ -68,6 +69,13 @@ static uint8_t rsp_buf[RSP_BUFFER_SIZE]; /* -------------------------------------------------------------------------- */ +static void __dead +usage(void) +{ + fprintf(stderr, "Usage: %s [-d <lvl>] [-n]\n", getprogname()); + exit(EXIT_FAILURE); +} + /* * create_node_name: @@ -162,21 +170,18 @@ init_daemon(void) list[i].num_entries = 0; } -#ifndef ISCSI_NOTHREAD - if ((i = pthread_mutex_init(&sesslist_lock, NULL)) != 0) { + if (!nothreads && (i = pthread_mutex_init(&sesslist_lock, NULL)) != 0) { printf("Mutex init failed (%d)\n", i); close(sock); return -1; } -#endif if (!register_event_handler()) { printf("Couldn't register event handler\n"); close(sock); unlink(ISCSID_SOCK_NAME); -#ifndef ISCSI_NOTHREAD - pthread_mutex_destroy(&sesslist_lock); -#endif + if (!nothreads) + pthread_mutex_destroy(&sesslist_lock); return -1; } @@ -473,9 +478,7 @@ process_message(iscsid_request_t *req, i void exit_daemon(void) { -#ifndef ISCSI_NOTHREAD LOCK_SESSIONS; -#endif deregister_event_handler(); #ifndef ISCSI_MINIMAL @@ -501,16 +504,30 @@ int /*ARGSUSED*/ main(int argc, char **argv) { - int req_temp, rsp_temp; + int req_temp, rsp_temp, c; ssize_t ret; size_t len; struct sockaddr_un from; socklen_t fromlen; iscsid_request_t *req; iscsid_response_t *rsp; -#ifdef ISCSI_NOTHREAD struct timeval seltout = { 2, 0 }; /* 2 second poll interval */ -#endif + char *p; + + while ((c = getopt(argc, argv, "d:n")) != -1) + switch (c) { + case 'n': + nothreads++; + break; + case 'd': + debug_level=(int)strtol(optarg, &p, 10); + if (*p) + errx(EXIT_FAILURE, "illegal debug level -- %s", + optarg); + break; + default: + usage(); + } client_sock = init_daemon(); if (client_sock < 0) @@ -518,21 +535,23 @@ main(int argc, char **argv) printf("iSCSI Daemon loaded\n"); - daemon(0, 1); + if (!debug_level) + daemon(0, 1); -#ifndef ISCSI_NOTHREAD - ret = pthread_create(&event_thread, NULL, event_handler, NULL); - if (ret) { - printf("Thread creation failed (%zd)\n", ret); - close(client_sock); - unlink(ISCSID_SOCK_NAME); - deregister_event_handler(); - pthread_mutex_destroy(&sesslist_lock); - return -1; + if (nothreads) + setsockopt(client_sock, SOL_SOCKET, SO_RCVTIMEO, &seltout, + sizeof(seltout)); + else { + ret = pthread_create(&event_thread, NULL, event_handler, NULL); + if (ret) { + printf("Thread creation failed (%zd)\n", ret); + close(client_sock); + unlink(ISCSID_SOCK_NAME); + deregister_event_handler(); + pthread_mutex_destroy(&sesslist_lock); + return -1; + } } -#else - setsockopt(client_sock, SOL_SOCKET, SO_RCVTIMEO, &seltout, sizeof(seltout)); -#endif /* ---------------------------------------------------------------------- */ @@ -542,23 +561,29 @@ main(int argc, char **argv) fromlen = sizeof(from); len = sizeof(iscsid_request_t); -#ifdef ISCSI_NOTHREAD - do { - ret = recvfrom(client_sock, req, len, MSG_PEEK | MSG_WAITALL, - (struct sockaddr *) &from, &fromlen); - if (ret == -1) - event_handler(NULL); - } while (ret == -1 && errno == EAGAIN); -#else - ret = recvfrom(client_sock, req, len, MSG_PEEK | MSG_WAITALL, - (struct sockaddr *)(void *)&from, &fromlen); -#endif + if (nothreads) { + do { + ret = recvfrom(client_sock, req, len, MSG_PEEK | + MSG_WAITALL, (struct sockaddr *)(void *)&from, + &fromlen); + if (ret == -1) + event_handler(NULL); + } while (ret == -1 && errno == EAGAIN); + } else { + do { + ret = recvfrom(client_sock, req, len, MSG_PEEK | + MSG_WAITALL, (struct sockaddr *) &from, + &fromlen); + if (ret == -1) + event_handler(NULL); + } while (ret == -1 && errno == EAGAIN); + } if ((size_t)ret != len) { perror("Receiving from socket"); break; } - DEB(99, ("Request %d, parlen %d\n", + DEB(98, ("Request %d, parlen %d\n", req->request, req->parameter_length)); len += req->parameter_length; @@ -604,7 +629,7 @@ main(int argc, char **argv) if (rsp == NULL) break; - DEB(99, ("Sending reply: status %d, len %d\n", + DEB(98, ("Sending reply: status %d, len %d\n", rsp->status, rsp->parameter_length)); /* send the response */ Index: src/sbin/iscsid/iscsid_targets.c diff -u src/sbin/iscsid/iscsid_targets.c:1.3 src/sbin/iscsid/iscsid_targets.c:1.3.2.1 --- src/sbin/iscsid/iscsid_targets.c:1.3 Sun Nov 20 01:23:57 2011 +++ src/sbin/iscsid/iscsid_targets.c Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_targets.c,v 1.3 2011/11/20 01:23:57 agc Exp $ */ +/* $NetBSD: iscsid_targets.c,v 1.3.2.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -114,7 +114,7 @@ create_portal(target_t *target, iscsi_po TAILQ_INSERT_TAIL(&list[PORTAL_LIST].list, &portal->entry, link); list[PORTAL_LIST].num_entries++; - DEB(9, ("create_portal returns %x\n", (int) portal)); + DEB(9, ("create_portal returns %p\n", portal)); return portal; } Index: src/sbin/iscsid/iscsid_globals.h diff -u src/sbin/iscsid/iscsid_globals.h:1.4 src/sbin/iscsid/iscsid_globals.h:1.4.2.1 --- src/sbin/iscsid/iscsid_globals.h:1.4 Sun Nov 20 01:23:57 2011 +++ src/sbin/iscsid/iscsid_globals.h Wed May 30 08:06:26 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_globals.h,v 1.4 2011/11/20 01:23:57 agc Exp $ */ +/* $NetBSD: iscsid_globals.h,v 1.4.2.1 2012/05/30 08:06:26 sborrill Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -379,33 +379,20 @@ iscsid_set_node_name_req_t node_name; /* Debugging stuff */ -#ifdef ISCSI_DEBUG -int debug_level; /* How much info to display */ +extern int debug_level; /* How much info to display */ #define DEBOUT(x) printf x #define DEB(lev,x) {if (debug_level >= lev) printf x ;} -#else - -#define DEBOUT(x) -#define DEB(lev,x) - -#endif - /* Session list protection shortcuts */ #if 0 #define LOCK_SESSIONS verify_sessions() #define UNLOCK_SESSIONS #endif -#ifdef ISCSI_NOTHREAD -#define LOCK_SESSIONS event_handler(NULL) -#define UNLOCK_SESSIONS -#else -#define LOCK_SESSIONS pthread_mutex_lock(&sesslist_lock) -#define UNLOCK_SESSIONS pthread_mutex_unlock(&sesslist_lock) -#endif +#define LOCK_SESSIONS if (nothreads) event_handler(NULL); else pthread_mutex_lock(&sesslist_lock) +#define UNLOCK_SESSIONS if (!nothreads) pthread_mutex_unlock(&sesslist_lock) /* Check whether ID is present */ Index: src/sys/dev/iscsi/iscsi_main.c diff -u src/sys/dev/iscsi/iscsi_main.c:1.1 src/sys/dev/iscsi/iscsi_main.c:1.1.8.1 --- src/sys/dev/iscsi/iscsi_main.c:1.1 Sun Oct 23 21:15:02 2011 +++ src/sys/dev/iscsi/iscsi_main.c Wed May 30 08:06:26 2012 @@ -483,7 +483,6 @@ iscsi_done(ccb_t *ccb) } /* Kernel Module support */ -#ifdef _MODULE #include <sys/module.h> @@ -493,6 +492,7 @@ static const struct cfiattrdata ibescsi_ }; static const struct cfiattrdata *const iscsi_attrs[] = { &ibescsi_info, NULL }; +#ifdef _MODULE CFDRIVER_DECL(iscsi, DV_DULL, iscsi_attrs); static struct cfdata iscsi_cfdata[] = { @@ -507,15 +507,19 @@ static struct cfdata iscsi_cfdata[] = { }, { NULL, NULL, 0, 0, NULL, 0, NULL } }; +#endif static int iscsi_modcmd(modcmd_t cmd, void *arg) { +#ifdef _MODULE devmajor_t cmajor = NODEVMAJOR, bmajor = NODEVMAJOR; int error; +#endif switch (cmd) { case MODULE_CMD_INIT: +#ifdef _MODULE error = config_cfdriver_attach(&iscsi_cd); if (error) { return error; @@ -556,11 +560,12 @@ iscsi_modcmd(modcmd_t cmd, void *arg) config_cfdriver_detach(&iscsi_cd); return ENXIO; } - +#endif return 0; break; case MODULE_CMD_FINI: +#ifdef _MODULE error = config_cfdata_detach(iscsi_cfdata); if (error) return error; @@ -568,13 +573,16 @@ iscsi_modcmd(modcmd_t cmd, void *arg) config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca); config_cfdriver_detach(&iscsi_cd); devsw_detach(NULL, &iscsi_cdevsw); - +#endif return 0; break; + case MODULE_CMD_AUTOUNLOAD: + return EBUSY; + break; + default: return ENOTTY; break; } } -#endif /* _MODULE */