Update iscsi tools:

Update iscsi tools.
This commit is contained in:
Mike Christie 2011-10-23 03:29:01 -05:00
parent f149ee29a9
commit 3949e157de
24 changed files with 92954 additions and 817 deletions

View File

@ -1,97 +1,7 @@
diff --git a/Makefile b/Makefile
index db460eb..a4d4ce0 100644
--- a/Makefile
+++ b/Makefile
@@ -32,6 +32,7 @@ user: ;
$(MAKE) -C utils/fwparam_ibft
$(MAKE) -C usr
$(MAKE) -C utils
+ $(MAKE) -C libiscsi
@echo
@echo "Compilation complete Output file"
@echo "----------------------------------- ----------------"
@@ -53,6 +54,7 @@ kernel: force
force: ;
clean:
+ $(MAKE) -C libiscsi clean
$(MAKE) -C utils/sysdeps clean
$(MAKE) -C utils/fwparam_ibft clean
$(MAKE) -C utils clean
diff --git a/libiscsi/Makefile b/libiscsi/Makefile
new file mode 100644
index 0000000..4aeb44f
--- /dev/null
+++ b/libiscsi/Makefile
@@ -0,0 +1,62 @@
+# This Makefile will work only with GNU make.
+
+OSNAME=$(shell uname -s)
+OPTFLAGS ?= -O2 -g
+WARNFLAGS ?= -Wall -Wstrict-prototypes
+CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I../include -I../usr -I../utils/open-isns \
+ -D$(OSNAME) -fPIC -D_GNU_SOURCE -fvisibility=hidden
+LIB = libiscsi.so.0
+TESTS = tests/test_discovery_sendtargets tests/test_discovery_firmware
+TESTS += tests/test_login tests/test_logout tests/test_params
+TESTS += tests/test_get_network_config tests/test_get_initiator_name
+TESTS += tests/test_set_auth tests/test_get_auth
+
+COMMON_SRCS = sysdeps.o
+# sources shared between iscsid, iscsiadm and iscsistart
+ISCSI_LIB_SRCS = session_info.o iscsi_util.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
+FW_PARAM_SRCS = fw_entry.o prom_lex.o prom_parse.tab.o fwparam_ppc.o fwparam_sysfs.o
+
+# sources shared with the userspace utils, note we build these separately
+# to get PIC versions.
+COMMON_OBJS = $(patsubst %.o, common-objs/%.o, $(COMMON_SRCS))
+USR_OBJS = $(patsubst %.o, usr-objs/%.o, $(ISCSI_LIB_SRCS) strings.o)
+FW_OBJS = $(patsubst %.o, fw-objs/%.o, $(FW_PARAM_SRCS))
+
+# Flags for the tests
+tests/% : CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I.
+
+all: lib tests html
+
+lib: $(LIB)
+tests: $(TESTS)
+
+common-objs/%.o: ../utils/sysdeps/%.c
+ mkdir -p common-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+usr-objs/%.o: ../usr/%.c
+ mkdir -p usr-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+fw-objs/%.o: ../utils/fwparam_ibft/%.c
+ mkdir -p fw-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(LIB): $(COMMON_OBJS) $(FW_OBJS) $(USR_OBJS) libiscsi.o
+ $(CC) $(CFLAGS) -L../utils/open-isns -lisns -shared -Wl,-soname,$(LIB) $^ -o $@
+ ln -s -f $(LIB) libiscsi.so
+
+$(TESTS): $(FW_OBJS) $(COMMON_OBJS) $(USR_OBJS) $(LIB)
+ $(CC) $(CFLAGS) -L../utils/open-isns -lisns -c $< -o $@
+
+html: libiscsi.h libiscsi.doxy
+ doxygen libiscsi.doxy
+
+clean:
+ rm -rf *.o common-objs usr-objs fw-objs libuip-objs libiscsi.so* \
+ .depend *~ html $(TESTS) tests/*~
+
+depend:
+ gcc $(CFLAGS) -M `ls *.c` > .depend
+
+-include .depend ../usr/.depend
diff --git a/libiscsi/libiscsi.c b/libiscsi/libiscsi.c
new file mode 100644
index 0000000..a9eb0a6
--- /dev/null
+++ b/libiscsi/libiscsi.c
@@ -0,0 +1,563 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.c 2011-08-14 16:53:58.000000000 -0500
@@ -0,0 +1,612 @@
+/*
+ * iSCSI Administration library
+ *
@ -131,9 +41,13 @@ index 0000000..a9eb0a6
+#include "iscsi_proto.h"
+#include "fw_context.h"
+#include "iscsid_req.h"
+#include "iscsi_err.h"
+
+#define CHECK(a) { context->error_str[0] = 0; rc = a; if (rc) goto leave; }
+
+/* UGLY, not thread safe :( */
+static int sysfs_initialized = 0;
+
+struct libiscsi_context {
+ char error_str[256];
+ /* For get_parameter_helper() */
@ -160,7 +74,10 @@ index 0000000..a9eb0a6
+ return NULL;
+
+ log_init("libiscsi", 1024, libiscsi_log, context);
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
+ increase_max_files();
+ if (idbm_init(NULL)) {
+ sysfs_cleanup();
@ -181,6 +98,16 @@ index 0000000..a9eb0a6
+ free(context);
+}
+
+static void free_iface_list(struct list_head *ifaces)
+{
+ struct iface_rec *iface, *tmp_iface;
+
+ list_for_each_entry_safe(iface, tmp_iface, ifaces, list) {
+ list_del(&iface->list);
+ free(iface);
+ }
+}
+
+static void free_rec_list(struct list_head *rec_list)
+{
+ struct node_rec *rec, *tmp;
@ -264,6 +191,8 @@ index 0000000..a9eb0a6
+ strlcpy((*found_nodes)[found].address,
+ rec->conn[0].address, NI_MAXHOST);
+ (*found_nodes)[found].port = rec->conn[0].port;
+ strlcpy((*found_nodes)[found].iface,
+ rec->iface.name, LIBISCSI_VALUE_MAXLEN);
+ found++;
+ }
+ }
@ -276,69 +205,84 @@ index 0000000..a9eb0a6
+int libiscsi_discover_firmware(struct libiscsi_context *context,
+ int *nr_found, struct libiscsi_node **found_nodes)
+{
+ struct boot_context fw_entry;
+ struct node_rec rec;
+ struct list_head targets, ifaces, rec_list;
+ discovery_rec_t drec;
+ int rc = 0;
+
+ if (nr_found)
+ *nr_found = 0;
+ if (found_nodes)
+ *found_nodes = NULL;
+ INIT_LIST_HEAD(&targets);
+ INIT_LIST_HEAD(&ifaces);
+ INIT_LIST_HEAD(&rec_list);
+
+ memset(&fw_entry, 0, sizeof fw_entry);
+ rc = fw_get_entry(&fw_entry);
+ if (nr_found) {
+ *nr_found = 0;
+ }
+
+ if (found_nodes) {
+ *found_nodes = NULL;
+ }
+
+ rc = fw_get_targets(&targets);
+ if (rc) {
+ strcpy(context->error_str, "Could not read fw values.");
+ log_error("%s: Could not get list of targets from firmware "
+ "(err %d).\n", __func__, rc);
+ return rc;
+ }
+
+ memset(&rec, 0, sizeof rec);
+ idbm_node_setup_defaults(&rec);
+ CHECK(iface_create_ifaces_from_boot_contexts(&ifaces, &targets));
+
+ strlcpy(rec.name, fw_entry.targetname, TARGET_NAME_MAXLEN);
+ rec.tpgt = 1;
+ strlcpy(rec.conn[0].address, fw_entry.target_ipaddr, NI_MAXHOST);
+ rec.conn[0].port = fw_entry.target_port;
+
+ iface_setup_defaults(&rec.iface);
+ strncpy(rec.iface.iname, fw_entry.initiatorname,
+ sizeof(fw_entry.initiatorname));
+ strncpy(rec.session.auth.username, fw_entry.chap_name,
+ sizeof(fw_entry.chap_name));
+ strncpy((char *)rec.session.auth.password, fw_entry.chap_password,
+ sizeof(fw_entry.chap_password));
+ strncpy(rec.session.auth.username_in, fw_entry.chap_name_in,
+ sizeof(fw_entry.chap_name_in));
+ strncpy((char *)rec.session.auth.password_in,
+ fw_entry.chap_password_in,
+ sizeof(fw_entry.chap_password_in));
+ rec.session.auth.password_length =
+ strlen((char *)fw_entry.chap_password);
+ rec.session.auth.password_in_length =
+ strlen((char *)fw_entry.chap_password_in);
+
+ CHECK(idbm_add_node(&rec, NULL, 1 /* overwrite */))
+
+ if (nr_found)
+ *nr_found = 1;
+
+ if (found_nodes) {
+ *found_nodes = calloc(1, sizeof **found_nodes);
+ if (*found_nodes == NULL) {
+ snprintf(context->error_str,
+ sizeof(context->error_str), strerror(ENOMEM));
+ rc = ENOMEM;
+ memset(&drec, 0, sizeof(drec));
+ drec.type = DISCOVERY_TYPE_FW;
+ rc = idbm_bind_ifaces_to_nodes(discovery_fw, &drec, &ifaces, &rec_list);
+ if (rc) {
+ log_error("%s: Could not determine target nodes from firmware "
+ "(err %d).\n", __func__, rc);
+ goto leave;
+ }
+ strlcpy((*found_nodes)[0].name, rec.name,
+ LIBISCSI_VALUE_MAXLEN);
+ (*found_nodes)[0].tpgt = rec.tpgt;
+ strlcpy((*found_nodes)[0].address,
+ rec.conn[0].address, NI_MAXHOST);
+ (*found_nodes)[0].port = rec.conn[0].port;
+
+ int node_count = 0;
+ struct list_head *pos;
+ list_for_each(pos, &rec_list) {
+ ++node_count;
+ }
+
+ struct libiscsi_node* new_nodes;
+ /* allocate enough space for all the nodes */
+ new_nodes = calloc(node_count, sizeof *new_nodes);
+ if (new_nodes == NULL) {
+ rc = ENOMEM;
+ log_error("%s: %s.\n", __func__, strerror(ENOMEM));
+ goto leave;
+ }
+
+ struct node_rec *rec;
+ struct libiscsi_node *new_node = new_nodes;
+ /* in one loop, add nodes to idbm and create libiscsi_node entries */
+ list_for_each_entry(rec, &rec_list, list) {
+ CHECK(idbm_add_node(rec, NULL, 1 /* overwrite */));
+
+ strlcpy(new_node->name, rec->name, LIBISCSI_VALUE_MAXLEN);
+ new_node->tpgt = rec->tpgt;
+ strlcpy(new_node->address, rec->conn[0].address, NI_MAXHOST);
+ new_node->port = rec->conn[0].port;
+ strlcpy(new_node->iface, rec->iface.name, LIBISCSI_VALUE_MAXLEN);
+
+ ++new_node;
+ }
+
+ /* update output parameters */
+ if (nr_found) {
+ *nr_found = node_count;
+ }
+ if (found_nodes) {
+ *found_nodes = new_nodes;
+ }
+
+leave:
+ fw_free_targets(&targets);
+
+ free_iface_list(&ifaces);
+ free_rec_list(&rec_list);
+
+ return rc;
+}
+
@ -465,9 +409,14 @@ index 0000000..a9eb0a6
+
+int login_helper(void *data, node_rec_t *rec)
+{
+ char *iface = (char*)data;
+ if (strcmp(iface, rec->iface.name))
+ /* different iface, skip it */
+ return -1;
+
+ int rc = iscsid_req_by_rec(MGMT_IPC_SESSION_LOGIN, rec);
+ if (rc) {
+ iscsid_handle_error(rc);
+ iscsi_err_print_msg(rc);
+ rc = ENOTCONN;
+ }
+ return rc;
@ -478,7 +427,7 @@ index 0000000..a9eb0a6
+{
+ int nr_found = 0, rc;
+
+ CHECK(idbm_for_each_iface(&nr_found, NULL, login_helper,
+ CHECK(idbm_for_each_iface(&nr_found, (void*)node->iface, login_helper,
+ (char *)node->name, node->tpgt,
+ (char *)node->address, node->port))
+ if (nr_found == 0) {
@ -501,7 +450,7 @@ index 0000000..a9eb0a6
+
+ rc = iscsid_req_by_sid(MGMT_IPC_SESSION_LOGOUT, info->sid);
+ if (rc) {
+ iscsid_handle_error(rc);
+ iscsi_err_print_msg(rc);
+ rc = EIO;
+ }
+
@ -623,6 +572,11 @@ index 0000000..a9eb0a6
+{
+ struct boot_context fw_entry;
+
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
+
+ memset(config, 0, sizeof *config);
+ memset(&fw_entry, 0, sizeof fw_entry);
+ if (fw_get_entry(&fw_entry))
@ -645,6 +599,11 @@ index 0000000..a9eb0a6
+{
+ struct boot_context fw_entry;
+
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
+
+ memset(initiatorname, 0, LIBISCSI_VALUE_MAXLEN);
+ memset(&fw_entry, 0, sizeof fw_entry);
+ if (fw_get_entry(&fw_entry))
@ -655,11 +614,9 @@ index 0000000..a9eb0a6
+
+ return 0;
+}
diff --git a/libiscsi/libiscsi.doxy b/libiscsi/libiscsi.doxy
new file mode 100644
index 0000000..663770f
--- /dev/null
+++ b/libiscsi/libiscsi.doxy
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.doxy open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.doxy
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.doxy 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.doxy 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,1473 @@
+# Doxyfile 1.5.7.1
+
@ -2134,12 +2091,10 @@ index 0000000..663770f
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/libiscsi/libiscsi.h b/libiscsi/libiscsi.h
new file mode 100644
index 0000000..a7d05a5
--- /dev/null
+++ b/libiscsi/libiscsi.h
@@ -0,0 +1,343 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.h open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/libiscsi.h 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/libiscsi.h 2011-08-14 16:53:58.000000000 -0500
@@ -0,0 +1,344 @@
+/*
+ * iSCSI Administration library
+ *
@ -2210,6 +2165,7 @@ index 0000000..a7d05a5
+ get used anywhere, so we keep things simple and assume one connection */
+ char address[NI_MAXHOST] /** Portal hostname or IP-address. */;
+ int port /** Portal port number. */;
+ char iface[LIBISCSI_VALUE_MAXLEN] /** Interface to connect through. */;
+};
+
+/** \brief libiscsi CHAP authentication information struct
@ -2483,12 +2439,75 @@ index 0000000..a7d05a5
+#endif /* __cplusplus */
+
+#endif
diff --git a/libiscsi/pylibiscsi.c b/libiscsi/pylibiscsi.c
new file mode 100644
index 0000000..454a26a
--- /dev/null
+++ b/libiscsi/pylibiscsi.c
@@ -0,0 +1,624 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/Makefile open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/Makefile 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/Makefile 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,61 @@
+# This Makefile will work only with GNU make.
+
+OSNAME=$(shell uname -s)
+OPTFLAGS ?= -O2 -g
+WARNFLAGS ?= -Wall -Wstrict-prototypes
+CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I../include -I../usr \
+ -D$(OSNAME) -fPIC -D_GNU_SOURCE -fvisibility=hidden
+LIB = libiscsi.so.0
+TESTS = tests/test_discovery_sendtargets tests/test_discovery_firmware
+TESTS += tests/test_login tests/test_logout tests/test_params
+TESTS += tests/test_get_network_config tests/test_get_initiator_name
+TESTS += tests/test_set_auth tests/test_get_auth
+
+COMMON_SRCS = sysdeps.o
+# sources shared between iscsid, iscsiadm and iscsistart
+ISCSI_LIB_SRCS = netlink.o transport.o cxgbi.o be2iscsi.o iscsi_timer.o initiator_common.o iscsi_err.o session_info.o iscsi_util.o dcb_app.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
+FW_PARAM_SRCS = fw_entry.o prom_lex.o prom_parse.tab.o fwparam_ppc.o fwparam_sysfs.o
+
+# sources shared with the userspace utils, note we build these separately
+# to get PIC versions.
+COMMON_OBJS = $(patsubst %.o, common-objs/%.o, $(COMMON_SRCS))
+USR_OBJS = $(patsubst %.o, usr-objs/%.o, $(ISCSI_LIB_SRCS) strings.o)
+FW_OBJS = $(patsubst %.o, fw-objs/%.o, $(FW_PARAM_SRCS))
+
+# Flags for the tests
+tests/% : CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I.
+
+all: lib tests html
+
+lib: $(LIB)
+tests: $(TESTS)
+
+common-objs/%.o: ../utils/sysdeps/%.c
+ mkdir -p common-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+usr-objs/%.o: ../usr/%.c
+ mkdir -p usr-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+fw-objs/%.o: ../utils/fwparam_ibft/%.c
+ mkdir -p fw-objs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(LIB): $(COMMON_OBJS) $(FW_OBJS) $(USR_OBJS) libiscsi.o
+ $(CC) $(CFLAGS) -shared -Wl,-soname,$(LIB) $^ -o $@
+ ln -s -f $(LIB) libiscsi.so
+
+$(TESTS): $(FW_OBJS) $(COMMON_OBJS) $(USR_OBJS) $(LIB)
+
+html: libiscsi.h libiscsi.doxy
+ doxygen libiscsi.doxy
+
+clean:
+ rm -rf *.o common-objs usr-objs fw-objs libuip-objs libiscsi.so* \
+ .depend *~ html $(TESTS) tests/*~
+
+depend:
+ gcc $(CFLAGS) -M `ls *.c` > .depend
+
+-include .depend ../usr/.depend
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/pylibiscsi.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/pylibiscsi.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/pylibiscsi.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/pylibiscsi.c 2011-08-14 16:53:58.000000000 -0500
@@ -0,0 +1,638 @@
+/*
+ * iSCSI Administration library
+ *
@ -2689,24 +2708,26 @@ index 0000000..454a26a
+static int PyIscsiNode_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ PyIscsiNode *node = (PyIscsiNode *)self;
+ char *kwlist[] = {"name", "tpgt", "address", "port", NULL};
+ const char *name = NULL, *address = NULL;
+ char *kwlist[] = {"name", "tpgt", "address", "port", "iface", NULL};
+ const char *name = NULL, *address = NULL, *iface = NULL;
+ int tpgt = -1, port = 3260;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|isi:node.__init__",
+ kwlist, &name, &tpgt, &address, &port))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|isis:node.__init__",
+ kwlist, &name, &tpgt, &address,
+ &port, &iface))
+ return -1;
+ if (address == NULL) {
+ PyErr_SetString(PyExc_ValueError, "address not set");
+ return -1;
+ }
+ if (check_string(name) || check_string(address))
+ if (check_string(name) || check_string(address) || check_string(iface))
+ return -1;
+
+ strcpy(node->node.name, name);
+ node->node.tpgt = tpgt;
+ strcpy(node->node.address, address);
+ node->node.port = port;
+ strcpy(node->node.iface, iface);
+
+ return 0;
+}
@ -2724,6 +2745,8 @@ index 0000000..454a26a
+ return PyString_FromString(node->node.address);
+ } else if (!strcmp(attr, "port")) {
+ return PyInt_FromLong(node->node.port);
+ } else if (!strcmp(attr, "iface")) {
+ return PyString_FromString(node->node.iface);
+ }
+ return NULL;
+}
@ -2751,6 +2774,10 @@ index 0000000..454a26a
+ if (!PyArg_Parse(value, "i", &i))
+ return -1;
+ node->node.port = i;
+ } else if (!strcmp(attr, "iface")) {
+ if (!PyArg_Parse(value, "s", &str) || check_string(str))
+ return -1;
+ strcpy(node->node.iface, str);
+ }
+
+ return 0;
@ -2778,6 +2805,10 @@ index 0000000..454a26a
+ if (self->node.port > other->node.port)
+ return -1;
+
+ res = strcmp(self->node.iface, other->node.iface);
+ if (res)
+ return res;
+
+ return 0;
+}
+
@ -2931,6 +2962,8 @@ index 0000000..454a26a
+ "address", "address"},
+ {"port", (getter)PyIscsiNode_get, (setter)PyIscsiNode_set,
+ "port", "port"},
+ {"iface", (getter)PyIscsiNode_get, (setter)PyIscsiNode_set,
+ "iface", "iface"},
+ {NULL}
+};
+
@ -3113,11 +3146,9 @@ index 0000000..454a26a
+ Py_INCREF(&PyIscsiNode_Type);
+ PyModule_AddObject(m, "node", (PyObject *) &PyIscsiNode_Type);
+}
diff --git a/libiscsi/setup.py b/libiscsi/setup.py
new file mode 100644
index 0000000..bb4329b
--- /dev/null
+++ b/libiscsi/setup.py
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/setup.py open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/setup.py
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/setup.py 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/setup.py 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,9 @@
+from distutils.core import setup, Extension
+
@ -3128,11 +3159,9 @@ index 0000000..bb4329b
+
+setup (name = 'PyIscsi',version = '1.0',
+ description = 'libiscsi python bindings', ext_modules = [module1])
diff --git a/libiscsi/tests/test_discovery_firmware.c b/libiscsi/tests/test_discovery_firmware.c
new file mode 100644
index 0000000..76e852a
--- /dev/null
+++ b/libiscsi/tests/test_discovery_firmware.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_discovery_firmware.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_discovery_firmware.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_discovery_firmware.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_discovery_firmware.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,53 @@
+/*
+ * iSCSI Administration library
@ -3187,11 +3216,9 @@ index 0000000..76e852a
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_discovery_sendtargets.c b/libiscsi/tests/test_discovery_sendtargets.c
new file mode 100644
index 0000000..1a3c12e
--- /dev/null
+++ b/libiscsi/tests/test_discovery_sendtargets.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_discovery_sendtargets.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_discovery_sendtargets.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_discovery_sendtargets.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_discovery_sendtargets.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,60 @@
+/*
+ * iSCSI Administration library
@ -3253,11 +3280,9 @@ index 0000000..1a3c12e
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_get_auth.c b/libiscsi/tests/test_get_auth.c
new file mode 100644
index 0000000..5e234da
--- /dev/null
+++ b/libiscsi/tests/test_get_auth.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_auth.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_auth.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_auth.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_auth.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,70 @@
+/*
+ * iSCSI Administration library
@ -3329,11 +3354,9 @@ index 0000000..5e234da
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_get_initiator_name.c b/libiscsi/tests/test_get_initiator_name.c
new file mode 100644
index 0000000..997c053
--- /dev/null
+++ b/libiscsi/tests/test_get_initiator_name.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_initiator_name.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_initiator_name.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_initiator_name.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_initiator_name.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,38 @@
+/*
+ * iSCSI Administration library
@ -3373,11 +3396,9 @@ index 0000000..997c053
+
+ return 0;
+}
diff --git a/libiscsi/tests/test_get_network_config.c b/libiscsi/tests/test_get_network_config.c
new file mode 100644
index 0000000..2dedd61
--- /dev/null
+++ b/libiscsi/tests/test_get_network_config.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_network_config.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_network_config.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_get_network_config.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_get_network_config.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,45 @@
+/*
+ * iSCSI Administration library
@ -3424,11 +3445,9 @@ index 0000000..2dedd61
+
+ return 0;
+}
diff --git a/libiscsi/tests/test_login.c b/libiscsi/tests/test_login.c
new file mode 100644
index 0000000..3eb70d6
--- /dev/null
+++ b/libiscsi/tests/test_login.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_login.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_login.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_login.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_login.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,52 @@
+/*
+ * iSCSI Administration library
@ -3482,11 +3501,9 @@ index 0000000..3eb70d6
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_logout.c b/libiscsi/tests/test_logout.c
new file mode 100644
index 0000000..b734dca
--- /dev/null
+++ b/libiscsi/tests/test_logout.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_logout.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_logout.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_logout.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_logout.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,51 @@
+/*
+ * iSCSI Administration library
@ -3539,11 +3556,9 @@ index 0000000..b734dca
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_params.c b/libiscsi/tests/test_params.c
new file mode 100644
index 0000000..d3223be
--- /dev/null
+++ b/libiscsi/tests/test_params.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_params.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_params.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_params.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_params.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,103 @@
+/*
+ * iSCSI Administration library
@ -3648,11 +3663,9 @@ index 0000000..d3223be
+
+ return rc;
+}
diff --git a/libiscsi/tests/test_set_auth.c b/libiscsi/tests/test_set_auth.c
new file mode 100644
index 0000000..a21f888
--- /dev/null
+++ b/libiscsi/tests/test_set_auth.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_set_auth.c open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_set_auth.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/tests/test_set_auth.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/tests/test_set_auth.c 2011-08-14 16:46:24.000000000 -0500
@@ -0,0 +1,58 @@
+/*
+ * iSCSI Administration library
@ -3712,10 +3725,28 @@ index 0000000..a21f888
+
+ return rc;
+}
diff --git a/usr/discovery.c b/usr/discovery.c
index 381f825..2233de7 100644
--- a/usr/discovery.c
+++ b/usr/discovery.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/Makefile open-iscsi-2.0-872-rc4-bnx2i.build/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i.base/Makefile 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/Makefile 2011-08-14 16:46:24.000000000 -0500
@@ -32,6 +32,7 @@ user: ;
$(MAKE) -C utils/fwparam_ibft
$(MAKE) -C usr
$(MAKE) -C utils
+ $(MAKE) -C libiscsi
@echo
@echo "Compilation complete Output file"
@echo "----------------------------------- ----------------"
@@ -53,6 +54,7 @@ kernel: force
force: ;
clean:
+ $(MAKE) -C libiscsi clean
$(MAKE) -C utils/sysdeps clean
$(MAKE) -C utils/fwparam_ibft clean
$(MAKE) -C utils clean
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/discovery.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/discovery.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/discovery.c 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/discovery.c 2011-08-14 16:46:24.000000000 -0500
@@ -36,6 +36,7 @@
#include "types.h"
#include "iscsi_proto.h"
@ -3724,14 +3755,82 @@ index 381f825..2233de7 100644
#include "log.h"
#include "idbm.h"
#include "iscsi_settings.h"
diff --git a/usr/iscsi_ipc.h b/usr/iscsi_ipc.h
index 74ef948..713914f 100644
--- a/usr/iscsi_ipc.h
+++ b/usr/iscsi_ipc.h
@@ -111,4 +111,6 @@ struct iscsi_ipc {
int (*recv_pdu_end) (struct iscsi_conn *conn);
@@ -50,9 +51,11 @@
#include "iscsi_timer.h"
#include "iscsi_err.h"
/* libisns includes */
+#ifdef ISNS_ENABLE
#include "isns.h"
#include "paths.h"
#include "message.h"
+#endif
#ifdef SLP_ENABLE
#include "iscsi-slp-discovery.h"
@@ -98,6 +101,7 @@ static int request_initiator_name(void)
return 0;
}
+#ifdef ISNS_ENABLE
void discovery_isns_free_servername(void)
{
if (isns_config.ic_server_name)
@@ -377,6 +381,7 @@ retry:
discovery_isns_free_servername();
return rc;
}
+#endif
int discovery_fw(void *data, struct iface_rec *iface,
struct list_head *rec_list)
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c 2011-08-14 16:46:24.000000000 -0500
@@ -1274,9 +1274,9 @@ int idbm_print_all_discovery(int info_le
* fn should return -1 if it skipped the rec, a ISCSI_ERR error code if
* the operation failed or 0 if fn was run successfully.
*/
-static int idbm_for_each_iface(int *found, void *data,
- idbm_iface_op_fn *fn,
- char *targetname, int tpgt, char *ip, int port)
+int idbm_for_each_iface(int *found, void *data,
+ idbm_iface_op_fn *fn,
+ char *targetname, int tpgt, char *ip, int port)
{
DIR *iface_dirfd;
struct dirent *iface_dent;
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.h 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.h 2011-08-14 16:46:24.000000000 -0500
@@ -98,6 +98,9 @@ struct rec_op_data {
node_rec_t *match_rec;
idbm_iface_op_fn *fn;
};
+extern int idbm_for_each_iface(int *found, void *data,
+ idbm_iface_op_fn *fn,
+ char *targetname, int tpgt, char *ip, int port);
extern int idbm_for_each_portal(int *found, void *data,
idbm_portal_op_fn *fn, char *targetname);
extern int idbm_for_each_node(int *found, void *data,
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsi_ipc.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsi_ipc.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsi_ipc.h 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsi_ipc.h 2011-08-14 16:46:24.000000000 -0500
@@ -136,4 +136,6 @@ struct iscsi_ipc {
int (*recv_conn_state) (struct iscsi_conn *conn, uint32_t *state);
};
+struct iscsi_ipc *ipc;
+
#endif /* ISCSI_IPC_H */
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/Makefile open-iscsi-2.0-872-rc4-bnx2i.build/usr/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/Makefile 2011-08-14 16:53:01.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/Makefile 2011-08-14 16:46:24.000000000 -0500
@@ -33,7 +33,7 @@ endif
OPTFLAGS ?= -O2 -g
WARNFLAGS ?= -Wall -Wstrict-prototypes
CFLAGS += $(OPTFLAGS) $(WARNFLAGS) -I../include -I. -I../utils/open-isns \
- -D$(OSNAME) $(IPC_CFLAGS)
+ -D$(OSNAME) $(IPC_CFLAGS) -DISNS_ENABLE
PROGRAMS = iscsid iscsiadm iscsistart
# libc compat files

View File

@ -0,0 +1,11 @@
--- open-iscsi-2.0-872-rc4-bnx2i/usr/version.h 2011-09-01 20:54:51.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/version.h 2011-09-01 20:59:20.000000000 -0500
@@ -6,7 +6,7 @@
* This may not be the same value as the kernel versions because
* some other maintainer could merge a patch without going through us
*/
-#define ISCSI_VERSION_STR "2.0-872"
+#define ISCSI_VERSION_STR "2.0-872.28.el6"
#define ISCSI_VERSION_FILE "/sys/module/scsi_transport_iscsi/version"
#endif

View File

@ -0,0 +1,19 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsi_uio/docs/iscsiuio.8 open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/docs/iscsiuio.8
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/docs/iscsiuio.8 2011-01-31 19:38:19.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/docs/iscsiuio.8 2011-01-31 19:38:44.000000000 -0600
@@ -67,6 +67,15 @@ into the background.
.TP
.BI -v
This is to print the version.
+.PP
+.TP
+.BI -p <pidfile>
+Use pidfile (default /var/run/iscsiuio.pid )
+.PP
+.TP
+.BI -h
+Display this help and exit.
+
.\"
.\" AUTHOR part

View File

@ -1,74 +0,0 @@
diff --git a/libiscsi/Makefile b/libiscsi/Makefile
index 4aeb44f..a91d6b8 100644
--- a/libiscsi/Makefile
+++ b/libiscsi/Makefile
@@ -3,7 +3,7 @@
OSNAME=$(shell uname -s)
OPTFLAGS ?= -O2 -g
WARNFLAGS ?= -Wall -Wstrict-prototypes
-CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I../include -I../usr -I../utils/open-isns \
+CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I../include -I../usr \
-D$(OSNAME) -fPIC -D_GNU_SOURCE -fvisibility=hidden
LIB = libiscsi.so.0
TESTS = tests/test_discovery_sendtargets tests/test_discovery_firmware
@@ -43,11 +43,10 @@ fw-objs/%.o: ../utils/fwparam_ibft/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(LIB): $(COMMON_OBJS) $(FW_OBJS) $(USR_OBJS) libiscsi.o
- $(CC) $(CFLAGS) -L../utils/open-isns -lisns -shared -Wl,-soname,$(LIB) $^ -o $@
+ $(CC) $(CFLAGS) -shared -Wl,-soname,$(LIB) $^ -o $@
ln -s -f $(LIB) libiscsi.so
$(TESTS): $(FW_OBJS) $(COMMON_OBJS) $(USR_OBJS) $(LIB)
- $(CC) $(CFLAGS) -L../utils/open-isns -lisns -c $< -o $@
html: libiscsi.h libiscsi.doxy
doxygen libiscsi.doxy
diff --git a/usr/Makefile b/usr/Makefile
index 8e505bf..13a60f9 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -31,7 +31,7 @@ endif
OPTFLAGS ?= -O2 -g
WARNFLAGS ?= -Wall -Wstrict-prototypes
CFLAGS += $(OPTFLAGS) $(WARNFLAGS) -I../include -I. -I../utils/open-isns \
- -D$(OSNAME) $(IPC_CFLAGS)
+ -D$(OSNAME) $(IPC_CFLAGS) -DISNS_ENABLE
PROGRAMS = iscsid iscsiadm iscsistart
# libc compat files
diff --git a/usr/discovery.c b/usr/discovery.c
index 2233de7..02c6f25 100644
--- a/usr/discovery.c
+++ b/usr/discovery.c
@@ -45,9 +45,11 @@
#include "iscsid_req.h"
#include "iscsi_util.h"
/* libisns includes */
+#ifdef ISNS_ENABLE
#include "isns.h"
#include "paths.h"
#include "message.h"
+#endif
#ifdef SLP_ENABLE
#include "iscsi-slp-discovery.h"
@@ -94,6 +96,7 @@ static int request_initiator_name(void)
return 0;
}
+#ifdef ISNS_ENABLE
void discovery_isns_free_servername(void)
{
if (isns_config.ic_server_name)
@@ -367,6 +370,7 @@ retry:
discovery_isns_free_servername();
return rc;
}
+#endif
int discovery_fw(void *data, struct iface_rec *iface,
struct list_head *rec_list)
--
1.6.6.1

View File

@ -0,0 +1,47 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/db-policy.c open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/db-policy.c
--- open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/db-policy.c 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/db-policy.c 2011-09-01 20:31:39.000000000 -0500
@@ -7,8 +7,10 @@
#include <sys/stat.h>
#include <string.h>
#include <unistd.h>
+#ifdef WITH_SECURITY
#include <openssl/pem.h>
#include <openssl/err.h>
+#endif
#include "isns.h"
#include "security.h"
#include "objects.h"
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/security.h open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/security.h
--- open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/security.h 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/security.h 2011-09-01 20:31:39.000000000 -0500
@@ -6,11 +6,16 @@
#ifndef ISNS_SECURITY_H
#define ISNS_SECURITY_H
-
-#include <openssl/evp.h>
#include "buffer.h"
#include "util.h"
+
+#ifdef WITH_SECURITY
+#include <openssl/evp.h>
+#else
+#define EVP_PKEY void
+#endif
+
/*
* Security context
*/
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/util.h open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/util.h
--- open-iscsi-2.0-872-rc4-bnx2i/utils/open-isns/util.h 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/utils/open-isns/util.h 2011-09-01 20:31:39.000000000 -0500
@@ -9,6 +9,7 @@
#include <sys/types.h>
#include <stdint.h>
+#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h> // for strdup

View File

@ -1,9 +1,9 @@
diff -aup open-iscsi-2.0-872-rc1-bnx2i/usr/Makefile open-iscsi-2.0-872-rc1-bnx2i.work/usr/Makefile
--- open-iscsi-2.0-872-rc1-bnx2i/usr/Makefile 2010-06-18 18:04:51.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/Makefile 2010-06-18 18:13:33.000000000 -0500
@@ -60,7 +60,7 @@ iscsiadm: $(ISCSI_LIB_SRCS) $(DISCOVERY_
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i/usr/Makefile 2011-01-31 06:23:53.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/Makefile 2011-01-31 06:23:14.000000000 -0600
@@ -61,7 +61,7 @@ iscsiadm: $(ISCSI_LIB_SRCS) $(DISCOVERY_
iscsistart: $(IPC_OBJ) $(ISCSI_LIB_SRCS) $(INITIATOR_SRCS) $(FW_BOOT_SRCS) \
iscsistart: $(ISCSI_LIB_SRCS) $(INITIATOR_SRCS) $(FW_BOOT_SRCS) \
iscsistart.o statics.o
- $(CC) $(CFLAGS) -static $^ -o $@
+ $(CC) $(CFLAGS) $^ -o $@

View File

@ -0,0 +1,172 @@
commit ac38eee2083821eb29d098227ad044c950d115e4
Author: Mike Christie <michaelc@cs.wisc.edu>
Date: Sun Aug 14 22:14:04 2011 -0500
iscsi tools: fix default iface binding setup
If a driver supports multiple ifaces only one is getting
auto created. This modifies the default iface setup code
so that it creates a iface per kernel iface or a iface per
host if kernel ifaces are not supported.
diff --git a/usr/iface.c b/usr/iface.c
index 5d5f7bf..9c70d09 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -424,12 +424,61 @@ int iface_get_by_net_binding(struct iface_rec *pattern,
return ISCSI_ERR_NO_OBJS_FOUND;
}
+static int iface_get_iptype(struct iface_rec *iface)
+{
+ if (strcmp(iface->bootproto, "dhcp") && !strstr(iface->ipaddress, "."))
+ return ISCSI_IFACE_TYPE_IPV6;
+ else
+ return ISCSI_IFACE_TYPE_IPV4;
+}
+
+static int iface_setup_binding_from_kern_iface(void *data,
+ struct iface_rec *kern_iface)
+{
+ struct host_info *hinfo = data;
+ struct iface_rec iface;
+
+ if (!strlen(hinfo->iface.hwaddress)) {
+ log_error("Invalid offload iSCSI host %u. Missing "
+ "hwaddress. Try upgrading %s driver.\n",
+ hinfo->host_no, hinfo->iface.transport_name);
+ return 0;
+ }
+
+ memset(&iface, 0, sizeof(struct iface_rec));
+ strcpy(iface.hwaddress, hinfo->iface.hwaddress);
+ strcpy(iface.transport_name, hinfo->iface.transport_name);
+
+ if (kern_iface) {
+ iface.iface_num = kern_iface->iface_num;
+
+ snprintf(iface.name, sizeof(iface.name), "%s.%s.%s.%u",
+ kern_iface->transport_name,
+ kern_iface->hwaddress,
+ iface_get_iptype(kern_iface) == ISCSI_IFACE_TYPE_IPV4 ?
+ "ipv4" : "ipv6", kern_iface->iface_num);
+ } else {
+ snprintf(iface.name, sizeof(iface.name), "%s.%s",
+ hinfo->iface.transport_name, hinfo->iface.hwaddress);
+ }
+
+ if (iface_conf_read(&iface)) {
+ /* not found so create it */
+ if (iface_conf_write(&iface)) {
+ log_error("Could not create default iface conf %s.",
+ iface.name);
+ /* fall through - will not be persistent */
+ }
+ }
+
+ return 0;
+}
+
static int __iface_setup_host_bindings(void *data, struct host_info *hinfo)
{
struct iface_rec *def_iface;
- struct iface_rec iface;
struct iscsi_transport *t;
- int i = 0;
+ int i = 0, nr_found;
t = iscsi_sysfs_get_transport_by_hba(hinfo->host_no);
if (!t)
@@ -441,26 +490,12 @@ static int __iface_setup_host_bindings(void *data, struct host_info *hinfo)
return 0;
}
- if (iface_get_by_net_binding(&hinfo->iface, &iface) ==
- ISCSI_ERR_NO_OBJS_FOUND) {
- /* Must be a new port */
- if (!strlen(hinfo->iface.hwaddress)) {
- log_error("Invalid offload iSCSI host %u. Missing "
- "hwaddress. Try upgrading %s driver.\n",
- hinfo->host_no, t->name);
- return 0;
- }
-
- memset(&iface, 0, sizeof(struct iface_rec));
- strcpy(iface.hwaddress, hinfo->iface.hwaddress);
- strcpy(iface.transport_name, hinfo->iface.transport_name);
- snprintf(iface.name, sizeof(iface.name), "%s.%s",
- t->name, hinfo->iface.hwaddress);
- if (iface_conf_write(&iface))
- log_error("Could not create default iface conf %s.",
- iface.name);
- /* fall through - will not be persistent */
- }
+ nr_found = 0;
+ iscsi_sysfs_for_each_iface_on_host(hinfo, hinfo->host_no,
+ &nr_found,
+ iface_setup_binding_from_kern_iface);
+ if (!nr_found)
+ iface_setup_binding_from_kern_iface(hinfo, NULL);
return 0;
}
@@ -843,7 +878,6 @@ int iface_setup_from_boot_context(struct iface_rec *iface,
memset(iface->name, 0, sizeof(iface->name));
snprintf(iface->name, sizeof(iface->name), "%s.%s",
iface->transport_name, context->mac);
-
strlcpy(iface->hwaddress, context->mac,
sizeof(iface->hwaddress));
strlcpy(iface->ipaddress, context->ipaddr,
@@ -921,9 +955,7 @@ static int __iface_get_param_count(void *data, struct iface_rec *iface)
if (strcmp(iface_params->primary->hwaddress, iface->hwaddress))
return 0;
- if (strcmp(iface->bootproto, "dhcp") && !strstr(iface->ipaddress, "."))
- iptype = ISCSI_IFACE_TYPE_IPV6;
-
+ iptype = iface_get_iptype(iface);
if (iptype == ISCSI_IFACE_TYPE_IPV4) {
if (strcmp(iface->state, "disable")) {
@@ -1466,12 +1498,10 @@ static int __iface_build_net_config(void *data, struct iface_rec *iface)
if (strcmp(net_config->primary->hwaddress, iface->hwaddress))
return 0;
- if (strcmp(iface->bootproto, "dhcp") && !strstr(iface->ipaddress, "."))
- iptype = ISCSI_IFACE_TYPE_IPV6;
-
/* start at 2, because 0 is for nlmsghdr and 1 for event */
iov = net_config->iovs + 2;
+ iptype = iface_get_iptype(iface);
if (iptype == ISCSI_IFACE_TYPE_IPV4) {
if (!strcmp(iface->state, "disable")) {
if (!iface_fill_net_state(&iov[net_config->count],
diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c
index 995549e..961cefd 100644
--- a/usr/iscsi_sysfs.c
+++ b/usr/iscsi_sysfs.c
@@ -425,9 +425,10 @@ uint32_t iscsi_sysfs_get_host_no_from_hwinfo(struct iface_rec *iface, int *rc)
static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
char *session, char *iface_kern_id)
{
+ uint32_t tmp_host_no, iface_num;
char host_id[NAME_SIZE];
struct iscsi_transport *t;
- int ret;
+ int ret, iface_type;
t = iscsi_sysfs_get_transport_by_hba(host_no);
if (!t)
@@ -582,6 +583,10 @@ static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
&iface->vlan_id);
sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan_priority",
&iface->vlan_priority);
+
+ if (sscanf(iface_kern_id, "ipv%d-iface-%u-%u", &iface_type,
+ &tmp_host_no, &iface_num) == 3)
+ iface->iface_num = iface_num;
done:
if (ret)
return ISCSI_ERR_SYSFS_LOOKUP;

View File

@ -0,0 +1,33 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/include/fw_context.h open-iscsi-2.0-872-rc4-bnx2i.work/include/fw_context.h
--- open-iscsi-2.0-872-rc4-bnx2i/include/fw_context.h 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/include/fw_context.h 2011-10-12 01:03:30.000000000 -0500
@@ -33,7 +34,7 @@ struct boot_context {
/* target settings */
int target_port;
char targetname[TARGET_NAME_MAXLEN + 1];
- char target_ipaddr[32];
+ char target_ipaddr[256];
char chap_name[AUTH_STR_MAX_LEN];
char chap_password[AUTH_STR_MAX_LEN];
char chap_name_in[AUTH_STR_MAX_LEN];
@@ -44,14 +45,14 @@ struct boot_context {
char initiatorname[TARGET_NAME_MAXLEN + 1];
/* network settings */
- char dhcp[18];
+ char dhcp[256];
char iface[IF_NAMESIZE];
char mac[18];
- char ipaddr[18];
- char gateway[18];
- char primary_dns[18];
- char secondary_dns[18];
- char mask[18];
+ char ipaddr[256];
+ char gateway[256];
+ char primary_dns[256];
+ char secondary_dns[256];
+ char mask[256];
char lun[17];
char vlan[15];

View File

@ -0,0 +1,13 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.c 2011-09-01 20:29:49.000000000 -0500
@@ -484,8 +484,7 @@ cleanup:
if (session->id != -1) {
log_debug(2, "kdestroy session %u", session->id);
session->r_stage = R_STAGE_SESSION_DESTOYED;
- err = ipc->destroy_session(session->t->handle, session->id);
- if (err) {
+ if (ipc->destroy_session(session->t->handle, session->id)) {
log_error("can not safely destroy session %d",
session->id);
return ISCSI_ERR_INTERNAL;

View File

@ -1,49 +0,0 @@
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/libiscsi/libiscsi.c open-iscsi-2.0-872-rc1-bnx2i.work/libiscsi/libiscsi.c
--- open-iscsi-2.0-872-rc1-bnx2i/libiscsi/libiscsi.c 2010-05-18 17:57:59.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/libiscsi/libiscsi.c 2010-05-18 17:58:43.000000000 -0500
@@ -40,6 +40,9 @@
#define CHECK(a) { context->error_str[0] = 0; rc = a; if (rc) goto leave; }
+/* UGLY, not thread safe :( */
+static int sysfs_initialized = 0;
+
struct libiscsi_context {
char error_str[256];
/* For get_parameter_helper() */
@@ -66,7 +69,10 @@ struct libiscsi_context *libiscsi_init(v
return NULL;
log_init("libiscsi", 1024, libiscsi_log, context);
- sysfs_init();
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
increase_max_files();
if (idbm_init(NULL)) {
sysfs_cleanup();
@@ -529,6 +535,11 @@ int libiscsi_get_firmware_network_config
{
struct boot_context fw_entry;
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
+
memset(config, 0, sizeof *config);
memset(&fw_entry, 0, sizeof fw_entry);
if (fw_get_entry(&fw_entry))
@@ -551,6 +562,11 @@ int libiscsi_get_firmware_initiator_name
{
struct boot_context fw_entry;
+ if (!sysfs_initialized) {
+ sysfs_init();
+ sysfs_initialized = 1;
+ }
+
memset(initiatorname, 0, LIBISCSI_VALUE_MAXLEN);
memset(&fw_entry, 0, sizeof fw_entry);
if (fw_get_entry(&fw_entry))

View File

@ -0,0 +1,12 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c open-iscsi-2.0-872-rc4-bnx2i.test/usr/netlink.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c 2011-09-20 18:01:34.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.test/usr/netlink.c 2011-09-20 18:01:54.000000000 -0500
@@ -185,7 +185,7 @@ kwritev(enum iscsi_uevent_e type, struct
for (i = 1; i < count; i++)
datalen += iovp[i].iov_len;
- nlh->nlmsg_len = NLMSG_ALIGN(datalen);
+ nlh->nlmsg_len = datalen + sizeof(*nlh);
nlh->nlmsg_pid = getpid();
nlh->nlmsg_flags = 0;
nlh->nlmsg_type = type;

View File

@ -1,236 +0,0 @@
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.c
--- open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.c 2010-05-18 17:58:00.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.c 2010-05-18 21:40:44.000000000 -0500
@@ -1096,6 +1096,18 @@ static void iscsi_login_timedout(void *d
}
}
+static void iscsi_uio_poll_login_timedout(void *data)
+{
+ struct queue_task *qtask = data;
+ struct iscsi_conn *conn = qtask->conn;
+ iscsi_session_t *session = conn->session;
+
+ log_debug(3, "timeout waiting for UIO ...\n");
+ mgmt_ipc_write_rsp(qtask, MGMT_IPC_ERR_TRANS_TIMEOUT);
+ conn_delete_timers(conn);
+ __session_destroy(session);
+}
+
static void iscsi_login_redirect(iscsi_conn_t *conn)
{
iscsi_session_t *session = conn->session;
@@ -2049,6 +2061,52 @@ cleanup:
session_conn_shutdown(conn, qtask, err);
}
+static void session_conn_uio_poll(void *data)
+{
+ struct iscsi_conn_context *conn_context = data;
+ iscsi_conn_t *conn = conn_context->conn;
+ struct iscsi_session *session = conn->session;
+ queue_task_t *qtask = conn_context->data;
+ int rc;
+
+ log_debug(4, "retrying uio poll");
+ rc = __set_net_config(session->t, session, &conn->session->nrec.iface);
+ if (rc != 0) {
+ if (rc == -EAGAIN) {
+ conn_context->data = qtask;
+ iscsi_sched_conn_context(conn_context, conn, 2,
+ EV_UIO_POLL);
+ return;
+ } else {
+ log_error("session_conn_uio_poll() "
+ "connection failure [0x%x]", rc);
+ actor_delete(&conn->login_timer);
+ iscsi_login_eh(conn, qtask, MGMT_IPC_ERR_INTERNAL);
+ iscsi_conn_context_put(conn_context);
+ return;
+ }
+ }
+ iscsi_conn_context_put(conn_context);
+
+ actor_delete(&conn->login_timer);
+ log_debug(4, "UIO ready trying connect");
+
+ /* uIP is ready try to connect */
+ if (gettimeofday(&conn->initial_connect_time, NULL))
+ log_error("Could not get initial connect time. If "
+ "login errors iscsid may give up the initial "
+ "login early. You should manually login.");
+
+ conn->state = STATE_XPT_WAIT;
+ if (iscsi_conn_connect(conn, qtask)) {
+ int delay = ISCSI_CONN_ERR_REOPEN_DELAY;
+ log_debug(4, "Waiting %u seconds before trying to reconnect.\n",
+ delay);
+ queue_delayed_reopen(qtask, delay);
+ }
+}
+
+
void iscsi_sched_conn_context(struct iscsi_conn_context *conn_context,
struct iscsi_conn *conn, unsigned long tmo,
int event)
@@ -2085,6 +2143,11 @@ void iscsi_sched_conn_context(struct isc
conn_context);
actor_schedule(&conn_context->actor);
break;
+ case EV_UIO_POLL:
+ actor_new(&conn_context->actor, session_conn_uio_poll,
+ conn_context);
+ actor_schedule(&conn_context->actor);
+ break;
case EV_CONN_LOGOUT_TIMER:
actor_timer(&conn_context->actor, tmo * 1000,
iscsi_logout_timedout, conn_context);
@@ -2150,8 +2213,10 @@ static int session_is_running(node_rec_t
}
static int iface_set_param(struct iscsi_transport *t, struct iface_rec *iface,
- struct iscsi_session *session)
+ queue_task_t *qtask)
{
+ struct iscsi_conn *conn = qtask->conn;
+ struct iscsi_session *session = conn->session;
int rc = 0;
log_debug(3, "setting iface %s, dev %s, set ip %s, hw %s, "
@@ -2170,6 +2235,29 @@ static int iface_set_param(struct iscsi_
}
rc = __set_net_config(t, session, iface);
+ if (rc == -EAGAIN && t->template->set_net_config) {
+ struct iscsi_conn_context *conn_context;
+
+ conn_context = iscsi_conn_context_get(conn, 0);
+ if (!conn_context) {
+ /* while reopening the recv pool should be full */
+ log_error("BUG: __session_conn_reopen could "
+ "not get conn context for recv.");
+ return ENOMEM;
+ }
+ conn_context->data = qtask;
+ conn->state = STATE_XPT_WAIT;
+
+ iscsi_sched_conn_context(conn_context, conn, 0, EV_UIO_POLL);
+
+ log_debug(3, "Setting login UIO poll timer "
+ "%p timeout %d", &conn->login_timer,
+ conn->login_timeout);
+ actor_timer(&conn->login_timer, conn->login_timeout * 1000,
+ iscsi_uio_poll_login_timedout, qtask);
+
+ return EAGAIN;
+ }
if (rc != 0)
return rc;
@@ -2203,6 +2291,7 @@ session_login_task(node_rec_t *rec, queu
iscsi_session_t *session;
iscsi_conn_t *conn;
struct iscsi_transport *t;
+ int rc;
if (session_is_running(rec))
return MGMT_IPC_ERR_EXISTS;
@@ -2276,7 +2365,16 @@ session_login_task(node_rec_t *rec, queu
conn = &session->conn[0];
qtask->conn = conn;
- if (iface_set_param(t, &rec->iface, session)) {
+ rc = iface_set_param(t, &rec->iface, qtask);
+ if (rc == EAGAIN) {
+ /*
+ * Cannot block iscsid, so caller is going to internally
+ * retry the operation.
+ */
+ qtask->rsp.command = MGMT_IPC_SESSION_LOGIN;
+ qtask->rsp.err = MGMT_IPC_OK;
+ return MGMT_IPC_OK;
+ } else if (rc) {
__session_destroy(session);
return MGMT_IPC_ERR_LOGIN_FAILURE;
}
Only in open-iscsi-2.0-872-rc1-bnx2i.work/usr/: initiator.c.orig
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.h open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.h
--- open-iscsi-2.0-872-rc1-bnx2i/usr/initiator.h 2010-05-18 17:58:00.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/initiator.h 2010-05-18 18:13:12.000000000 -0500
@@ -88,6 +88,7 @@ typedef enum iscsi_event_e {
EV_CONN_ERROR,
EV_CONN_LOGOUT_TIMER,
EV_CONN_STOP,
+ EV_UIO_POLL,
} iscsi_event_e;
struct queue_task;
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/iscsid_req.c open-iscsi-2.0-872-rc1-bnx2i.work/usr/iscsid_req.c
--- open-iscsi-2.0-872-rc1-bnx2i/usr/iscsid_req.c 2010-05-18 17:58:00.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/iscsid_req.c 2010-05-18 21:16:21.000000000 -0500
@@ -217,6 +217,8 @@ int uip_broadcast(void *buf, size_t buf_
return err;
}
+ log_debug(3, "connected to uIP daemon");
+
/* Send the data to uIP */
if ((err = write(fd, buf, buf_len)) != buf_len) {
log_error("got write error (%d/%d), daemon died?",
@@ -225,6 +227,8 @@ int uip_broadcast(void *buf, size_t buf_
return -EIO;
}
+ log_debug(3, "send iface config to uIP daemon");
+
/* Set the socket to a non-blocking read, this way if there are
* problems waiting for uIP, iscsid can bailout early */
flags = fcntl(fd, F_GETFL, 0);
@@ -243,8 +247,10 @@ int uip_broadcast(void *buf, size_t buf_
/* Wait for the response */
err = read(fd, &rsp, sizeof(rsp));
if (err == sizeof(rsp)) {
- log_debug(3, "Broadcasted to uIP with length: %ld\n",
- buf_len);
+ log_debug(3, "Broadcasted to uIP with length: %ld "
+ "cmd: 0x%x rsp: 0x%x\n", buf_len,
+ rsp.command, rsp.err);
+ err = 0;
break;
} else if((err == -1) && (errno == EAGAIN)) {
usleep(250000);
@@ -256,12 +262,17 @@ int uip_broadcast(void *buf, size_t buf_
}
}
- if(count == MAX_UIP_BROADCAST_READ_TRIES)
- log_error("Could not broadcast to uIP");
+ if (count == MAX_UIP_BROADCAST_READ_TRIES) {
+ log_error("Could not broadcast to uIP after %d tries",
+ count);
+ err = -EAGAIN;
+ } else if (rsp.err != ISCISD_UIP_MGMT_IPC_DEVICE_UP) {
+ log_debug(3, "Device is not ready\n");
+ err = -EAGAIN;
+ }
close(fd);
-
- return 0;
+ return err;
}
void iscsid_handle_error(mgmt_ipc_err_e err)
Only in open-iscsi-2.0-872-rc1-bnx2i.work/usr/: iscsid_req.c.orig
diff -aurp open-iscsi-2.0-872-rc1-bnx2i/usr/uip_mgmt_ipc.h open-iscsi-2.0-872-rc1-bnx2i.work/usr/uip_mgmt_ipc.h
--- open-iscsi-2.0-872-rc1-bnx2i/usr/uip_mgmt_ipc.h 2010-05-18 17:58:00.000000000 -0500
+++ open-iscsi-2.0-872-rc1-bnx2i.work/usr/uip_mgmt_ipc.h 2010-05-18 18:13:12.000000000 -0500
@@ -55,6 +55,8 @@ typedef enum iscsid_uip_mgmt_ipc_err {
ISCISD_UIP_MGMT_IPC_ERR = 1,
ISCISD_UIP_MGMT_IPC_ERR_NOT_FOUND = 2,
ISCISD_UIP_MGMT_IPC_ERR_NOMEM = 3,
+ ISCISD_UIP_MGMT_IPC_DEVICE_UP = 4,
+ ISCISD_UIP_MGMT_IPC_DEVICE_INITIALIZING = 5,
} iscsid_uip_mgmt_ipc_err_e;
/* IPC Response */

View File

@ -0,0 +1,471 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_if.h open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_if.h
--- open-iscsi-2.0-872-rc4-bnx2i/include/iscsi_if.h 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/include/iscsi_if.h 2011-10-11 00:40:49.000000000 -0500
@@ -320,10 +320,11 @@ enum iscsi_net_param {
ISCSI_NET_PARAM_VLAN_ID = 13,
ISCSI_NET_PARAM_VLAN_PRIORITY = 14,
ISCSI_NET_PARAM_VLAN_ENABLED = 15,
- ISCSI_NET_PARAM_IFACE_TYPE = 16,
- ISCSI_NET_PARAM_IFACE_NAME = 17,
- ISCSI_NET_PARAM_MTU = 18,
- ISCSI_NET_PARAM_PORT = 19,
+ ISCSI_NET_PARAM_VLAN_TAG = 16,
+ ISCSI_NET_PARAM_IFACE_TYPE = 17,
+ ISCSI_NET_PARAM_IFACE_NAME = 18,
+ ISCSI_NET_PARAM_MTU = 19,
+ ISCSI_NET_PARAM_PORT = 20,
};
enum iscsi_conn_state {
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/host.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/host.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/host.c 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/host.c 2011-10-11 00:41:01.000000000 -0500
@@ -132,22 +132,67 @@ static int print_host_iface(void *data,
printf("%sIPaddress: %s\n", prefix, UNKNOWN_VALUE);
else if (strchr(iface->ipaddress, '.')) {
printf("%sIPaddress: %s\n", prefix, iface->ipaddress);
- printf("%sGateway: %s\n", prefix, iface->gateway);
- printf("%sSubnet: %s\n", prefix, iface->subnet_mask);
- printf("%sBootProto: %s\n", prefix, iface->bootproto);
+
+ if (!strlen(iface->gateway))
+ printf("%sGateway: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sGateway: %s\n", prefix, iface->gateway);
+ if (!strlen(iface->subnet_mask))
+ printf("%sSubnet: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sSubnet: %s\n", prefix, iface->subnet_mask);
+ if (!strlen(iface->bootproto))
+ printf("%sBootProto: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sBootProto: %s\n", prefix, iface->bootproto);
} else {
printf("%sIPaddress: [%s]\n", prefix, iface->ipaddress);
- printf("%sIPaddress Autocfg: %s\n", prefix, iface->ipv6_autocfg);
- printf("%sLink Local Address: [%s]\n", prefix,
- iface->ipv6_linklocal);
- printf("%sLink Local Autocfg: %s\n", prefix,
- iface->linklocal_autocfg);
- printf("%sRouter Address: [%s]\n", prefix, iface->ipv6_router);
+
+ if (!strlen(iface->ipv6_autocfg))
+ printf("%sIPaddress Autocfg: %s\n", prefix,
+ UNKNOWN_VALUE);
+ else
+ printf("%sIPaddress Autocfg: %s\n", prefix,
+ iface->ipv6_autocfg);
+ if (!strlen(iface->ipv6_linklocal))
+ printf("%sLink Local Address: %s\n", prefix,
+ UNKNOWN_VALUE);
+ else
+ printf("%sLink Local Address: [%s]\n", prefix,
+ iface->ipv6_linklocal);
+ if (!strlen(iface->linklocal_autocfg))
+ printf("%sLink Local Autocfg: %s\n", prefix,
+ UNKNOWN_VALUE);
+ else
+ printf("%sLink Local Autocfg: %s\n", prefix,
+ iface->linklocal_autocfg);
+ if (!strlen(iface->ipv6_router))
+ printf("%sRouter Address: %s\n", prefix,
+ UNKNOWN_VALUE);
+ else
+ printf("%sRouter Address: [%s]\n", prefix,
+ iface->ipv6_router);
}
- printf("%sMTU: %u\n", prefix, iface->mtu);
- printf("%svlan ID: %u\n", prefix, iface->vlan_id);
- printf("%svlan priority: %u\n", prefix, iface->vlan_priority);
+ if (!iface->port)
+ printf("%sPort: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sPort: %u\n", prefix, iface->port);
+
+ if (!iface->mtu)
+ printf("%sMTU: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sMTU: %u\n", prefix, iface->mtu);
+
+ if (iface->vlan_id == UINT16_MAX)
+ printf("%sVLAN ID: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sVLAN ID: %u\n", prefix, iface->vlan_id);
+
+ if (iface->vlan_priority == UINT8_MAX)
+ printf("%sVLAN priority: %s\n", prefix, UNKNOWN_VALUE);
+ else
+ printf("%sVLAN priority: %u\n", prefix, iface->vlan_priority);
return 0;
}
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iface.c 2011-10-11 00:40:49.000000000 -0500
@@ -41,6 +41,7 @@
#include "fw_context.h"
#include "sysdeps.h"
#include "iscsi_err.h"
+#include "iscsi_netlink.h"
/*
* Default ifaces for use with transports that do not bind to hardware
@@ -1141,14 +1142,16 @@ static int iface_fill_port(struct iovec
int len;
struct iscsi_iface_param_info *net_param;
uint16_t port = 3260;
+ struct nlattr *attr;
- len = sizeof(struct iscsi_iface_param_info) + 2;
- iov->iov_base = calloc(len, sizeof(char));
- if (!(iov->iov_base))
+ len = sizeof(struct iscsi_iface_param_info) + sizeof(port);
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_PORT, len);
+ if (!iov->iov_base)
return 1;
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_PORT;
net_param->iface_type = iface_type;
net_param->iface_num = iface->iface_num;
@@ -1166,14 +1169,16 @@ static int iface_fill_mtu(struct iovec *
int len;
struct iscsi_iface_param_info *net_param;
uint16_t mtu = 0;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 2;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_MTU, len);
if (!(iov->iov_base))
return 1;
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_MTU;
net_param->iface_type = iface_type;
net_param->iface_num = iface->iface_num;
@@ -1191,15 +1196,17 @@ static int iface_fill_vlan_id(struct iov
int len;
struct iscsi_iface_param_info *net_param;
uint16_t vlan = 0;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 2;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_VLAN_TAG, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
- net_param->param = ISCSI_NET_PARAM_VLAN_ID;
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
+ net_param->param = ISCSI_NET_PARAM_VLAN_TAG;
net_param->iface_type = iface_type;
net_param->iface_num = iface->iface_num;
net_param->param_type = ISCSI_NET_PARAM;
@@ -1222,14 +1229,16 @@ static int iface_fill_vlan_state(struct
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_VLAN_ENABLED, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_VLAN_ENABLED;
net_param->iface_type = iface_type;
net_param->iface_num = iface->iface_num;
@@ -1248,14 +1257,16 @@ static int iface_fill_net_state(struct i
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IFACE_ENABLE, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_IFACE_ENABLE;
net_param->iface_type = iface_type;
net_param->iface_num = iface->iface_num;
@@ -1273,14 +1284,16 @@ static int iface_fill_net_bootproto(stru
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IPV4_BOOTPROTO, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_IPV4_BOOTPROTO;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV4;
net_param->iface_num = iface->iface_num;
@@ -1298,14 +1311,16 @@ static int iface_fill_net_autocfg(struct
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV6;
net_param->param_type = ISCSI_NET_PARAM;
@@ -1327,14 +1342,17 @@ static int iface_fill_linklocal_autocfg(
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,
+ len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV6;
net_param->param_type = ISCSI_NET_PARAM;
@@ -1353,14 +1371,17 @@ static int iface_fill_router_autocfg(str
{
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 1;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,
+ len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV6;
net_param->param_type = ISCSI_NET_PARAM;
@@ -1381,14 +1402,16 @@ static int iface_fill_net_ipv4_addr(stru
int rc = 1;
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 4;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(param, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = param;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV4;
net_param->iface_num = iface->iface_num;
@@ -1435,14 +1458,16 @@ static int iface_fill_net_ipv6_addr(stru
int rc;
int len;
struct iscsi_iface_param_info *net_param;
+ struct nlattr *attr;
len = sizeof(struct iscsi_iface_param_info) + 16;
- iov->iov_base = calloc(len, sizeof(char));
+ iov->iov_base = iscsi_nla_alloc(param, len);
if (!(iov->iov_base))
return 1;
- iov->iov_len = len;
- net_param = (struct iscsi_iface_param_info *)(iov->iov_base);
+ attr = iov->iov_base;
+ iov->iov_len = NLA_ALIGN(attr->nla_len);
+ net_param = (struct iscsi_iface_param_info *)ISCSI_NLA_DATA(attr);
net_param->param = param;
net_param->iface_type = ISCSI_IFACE_TYPE_IPV6;
net_param->iface_num = iface->iface_num;
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/initiator.c 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/initiator.c 2011-10-11 00:39:57.000000000 -0500
@@ -1682,9 +1682,10 @@ static void session_conn_process_login(v
session->nrec.conn[conn->id].address,
session->nrec.conn[conn->id].port,
session->nrec.iface.name);
- } else
+ } else {
session->notify_qtask = NULL;
-
+ mgmt_ipc_write_rsp(c->qtask, ISCSI_SUCCESS);
+ }
/*
* reset ERL=0 reopen counter
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_netlink.h open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_netlink.h
--- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_netlink.h 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_netlink.h 2011-10-11 00:40:34.000000000 -0500
@@ -0,0 +1,33 @@
+/*
+ * iSCSI Netlink attr helpers
+ *
+ * Copyright (C) 2011 Red Hat, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * See the file COPYING included with this distribution for more details.
+ */
+
+#ifndef ISCSI_NLA_H
+#define ISCSI_NLA_H
+
+#include <linux/netlink.h>
+
+struct iovec;
+
+#define ISCSI_NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr)))
+#define ISCSI_NLA_DATA(nla) ((void *)((char*)(nla) + ISCSI_NLA_HDRLEN))
+#define ISCSI_NLA_LEN(len) ((len) + NLA_ALIGN(ISCSI_NLA_HDRLEN))
+#define ISCSI_NLA_TOTAL_LEN(len) (NLA_ALIGN(ISCSI_NLA_LEN(len)))
+
+extern struct nlattr *iscsi_nla_alloc(uint16_t type, uint16_t len);
+
+#endif
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_sysfs.c 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/iscsi_sysfs.c 2011-10-11 00:41:01.000000000 -0500
@@ -561,28 +561,28 @@ static int iscsi_sysfs_read_iface(struct
"link_local_addr", iface->ipv6_linklocal,
sizeof(iface->ipv6_linklocal));
- if (sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
- "linklocal_autocfg",
- iface->linklocal_autocfg,
- sizeof(iface->linklocal_autocfg))) {
- /* misspelled in some test kernels */
- sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
- "link_local_autocfg",
- iface->linklocal_autocfg,
- sizeof(iface->linklocal_autocfg));
- }
+ sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS,
+ "link_local_autocfg", iface->linklocal_autocfg,
+ sizeof(iface->linklocal_autocfg));
sysfs_get_str(iface_kern_id, ISCSI_IFACE_SUBSYS, "router_addr",
iface->ipv6_router,
sizeof(iface->ipv6_router));
}
- sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "mtu",
- &iface->mtu);
- sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan",
- &iface->vlan_id);
- sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan_priority",
- &iface->vlan_priority);
+ if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "port",
+ &iface->port))
+ iface->port = 0;
+ if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "mtu",
+ &iface->mtu))
+ iface->mtu = 0;
+ if (sysfs_get_uint16(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan_id",
+ &iface->vlan_id))
+ iface->vlan_id = UINT16_MAX;
+
+ if (sysfs_get_uint8(iface_kern_id, ISCSI_IFACE_SUBSYS, "vlan_priority",
+ &iface->vlan_priority))
+ iface->vlan_priority = UINT8_MAX;
if (sscanf(iface_kern_id, "ipv%d-iface-%u-%u", &iface_type,
&tmp_host_no, &iface_num) == 3)
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c open-iscsi-2.0-872-rc4-bnx2i.work/usr/netlink.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/netlink.c 2011-10-10 13:57:38.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.work/usr/netlink.c 2011-10-11 00:40:34.000000000 -0500
@@ -38,6 +38,7 @@
#include "initiator.h"
#include "iscsi_sysfs.h"
#include "transport.h"
+#include "iscsi_netlink.h"
static int ctrl_fd;
static struct sockaddr_nl src_addr, dest_addr;
@@ -63,6 +64,19 @@ static int ctldev_handle(void);
#define NLM_SETPARAM_DEFAULT_MAX (NI_MAXHOST + 1 + sizeof(struct iscsi_uevent))
+struct nlattr *iscsi_nla_alloc(uint16_t type, uint16_t len)
+{
+ struct nlattr *attr;
+
+ attr = calloc(1, ISCSI_NLA_TOTAL_LEN(len));
+ if (!attr)
+ return NULL;
+
+ attr->nla_len = ISCSI_NLA_LEN(len);
+ attr->nla_type = type;
+ return attr;
+}
+
static int
kread(char *data, int count)
{

View File

@ -0,0 +1,46 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c open-iscsi-2.0-872-rc4-bnx2i.test/usr/iface.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/iface.c 2011-09-08 15:26:45.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.test/usr/iface.c 2011-09-08 15:31:32.000000000 -0500
@@ -829,6 +829,7 @@ int iface_setup_from_boot_context(struct
{
struct iscsi_transport *t;
uint32_t hostno;
+ int rc;
if (strlen(context->initiatorname))
strlcpy(iface->iname, context->initiatorname,
@@ -841,8 +842,6 @@ int iface_setup_from_boot_context(struct
return 0;
}
} else if (strlen(context->iface)) {
-/* this ifdef is only temp until distros and firmwares are updated */
-#ifdef OFFLOAD_BOOT_SUPPORTED
hostno = iscsi_sysfs_get_host_no_from_hwaddress(context->mac,
&rc);
if (rc) {
@@ -857,9 +856,6 @@ int iface_setup_from_boot_context(struct
}
strlcpy(iface->netdev, context->iface, sizeof(iface->netdev));
-#else
- return 0;
-#endif
} else
return 0;
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_net_util.c open-iscsi-2.0-872-rc4-bnx2i.test/usr/iscsi_net_util.c
--- open-iscsi-2.0-872-rc4-bnx2i/usr/iscsi_net_util.c 2011-09-08 15:27:24.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.test/usr/iscsi_net_util.c 2011-09-08 15:26:50.000000000 -0500
@@ -39,12 +39,10 @@ struct iscsi_net_driver {
};
static struct iscsi_net_driver net_drivers[] = {
-#ifdef OFFLOAD_BOOT_SUPPORTED
{"cxgb3", "cxgb3i" },
{"cxgb4", "cxgb4i" },
{"bnx2", "bnx2i" },
{"bnx2x", "bnx2i"},
-#endif
{NULL, NULL}
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,371 @@
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/configure
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/configure 2011-09-01 20:33:58.000000000 -0500
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for iscsiuio 0.7.0.12.
+# Generated by GNU Autoconf 2.59 for iscsiuio 0.7.0.14.
#
# Report bugs to <eddie.wai@broadcom.com>.
#
@@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='iscsiuio'
PACKAGE_TARNAME='iscsiuio'
-PACKAGE_VERSION='0.7.0.12'
-PACKAGE_STRING='iscsiuio 0.7.0.12'
+PACKAGE_VERSION='0.7.0.14'
+PACKAGE_STRING='iscsiuio 0.7.0.14'
PACKAGE_BUGREPORT='eddie.wai@broadcom.com'
# Factoring default headers for most tests.
@@ -954,7 +954,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures iscsiuio 0.7.0.12 to adapt to many kinds of systems.
+\`configure' configures iscsiuio 0.7.0.14 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1020,7 +1020,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of iscsiuio 0.7.0.12:";;
+ short | recursive ) echo "Configuration of iscsiuio 0.7.0.14:";;
esac
cat <<\_ACEOF
@@ -1161,7 +1161,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-iscsiuio configure 0.7.0.12
+iscsiuio configure 0.7.0.14
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1175,7 +1175,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by iscsiuio $as_me 0.7.0.12, which was
+It was created by iscsiuio $as_me 0.7.0.14, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -21726,7 +21726,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
-This file was extended by iscsiuio $as_me 0.7.0.12, which was
+This file was extended by iscsiuio $as_me 0.7.0.14, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21789,7 +21789,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-iscsiuio config.status 0.7.0.12
+iscsiuio config.status 0.7.0.14
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure.ac open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/configure.ac
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure.ac 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/configure.ac 2011-09-01 20:33:58.000000000 -0500
@@ -11,9 +11,9 @@ dnl Maintained by: Eddie Wai (eddie.wai@
dnl
PACKAGE=iscsiuio
-VERSION=0.7.0.12
+VERSION=0.7.0.14
-AC_INIT(iscsiuio, 0.7.0.12, eddie.wai@broadcom.com)
+AC_INIT(iscsiuio, 0.7.0.14, eddie.wai@broadcom.com)
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
AC_CONFIG_HEADER(config.h)
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/docs/iscsiuio.8 open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/docs/iscsiuio.8
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/docs/iscsiuio.8 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/docs/iscsiuio.8 2011-09-01 20:33:58.000000000 -0500
@@ -3,9 +3,9 @@
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation.
.\"
-.\" bnx2.4,v 0.7.0.12
+.\" bnx2.4,v 0.7.0.14
.\"
-.TH iscsiuio 8 "08/04/2011" "Broadcom Corporation"
+.TH iscsiuio 8 "08/23/2011" "Broadcom Corporation"
.\"
.\" NAME part
.\"
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/uip_mgmt_ipc.h open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/include/uip_mgmt_ipc.h
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/uip_mgmt_ipc.h 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/include/uip_mgmt_ipc.h 2011-09-01 20:33:47.000000000 -0500
@@ -50,11 +50,11 @@ typedef struct iscsid_uip_broadcast {
typedef enum iscsid_uip_mgmt_ipc_err {
ISCSID_UIP_MGMT_IPC_OK = 0,
- ISCISD_UIP_MGMT_IPC_ERR = 1,
- ISCISD_UIP_MGMT_IPC_ERR_NOT_FOUND = 2,
- ISCISD_UIP_MGMT_IPC_ERR_NOMEM = 3,
- ISCISD_UIP_MGMT_IPC_DEVICE_UP = 4,
- ISCISD_UIP_MGMT_IPC_DEVICE_INITIALIZING = 5,
+ ISCSID_UIP_MGMT_IPC_ERR = 1,
+ ISCSID_UIP_MGMT_IPC_ERR_NOT_FOUND = 2,
+ ISCSID_UIP_MGMT_IPC_ERR_NOMEM = 3,
+ ISCSID_UIP_MGMT_IPC_DEVICE_UP = 4,
+ ISCSID_UIP_MGMT_IPC_DEVICE_INITIALIZING = 5,
} iscsid_uip_mgmt_ipc_err_e;
/* IPC Response */
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/README open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/README
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/README 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/README 2011-09-01 20:33:58.000000000 -0500
@@ -1,6 +1,6 @@
-Broadcom iSCSI Userspace Tools
-Version 0.7.0.12
-Aug 04, 2011
+iscsiuio Userspace Tools
+Version 0.7.0.14
+Aug 23, 2011
------------------------------------------------------
This tools is to be used in conjunction with the Broadcom NetXtreme II Linux
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/RELEASE.TXT open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/RELEASE.TXT
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/RELEASE.TXT 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/RELEASE.TXT 2011-09-01 20:33:58.000000000 -0500
@@ -1,7 +1,7 @@
Release Notes
Broadcom uIP Linux Driver
- Version 0.7.0.12
- 08/04/2011
+ Version 0.7.0.14
+ 08/23/2011
Broadcom Corporation
5300 California Avenue,
@@ -10,6 +10,36 @@
Copyright (c) 2004 - 2011 Broadcom Corporation
All rights reserved
+uIP v0.7.0.14 (Aug 23, 2011)
+=======================================================
+ Fixes
+ -----
+ 1. Problem: Cont00057840 - RHEL6.2 inbox: Unable to connect to
+ targets with 5709
+ Cause: For cases when the bnx2/bnx2x driver gets removed, the
+ uio database that was built by cnic would have the device
+ ->net reference removed. This has caused an unnecessary
+ timeout of 5s for each stale uio entry in the database.
+ Change: Adjusted the routine which seeks the device->net entry
+ to include more logic instead of hard waiting for 5s.
+
+ Enhancements
+ ------------
+ 1. Change: Added support for RHEL6.2 for out-of-box release
+ 2. Change: Updated the man page with -h and -p info
+ 3. Change: Updated the -h info
+
+
+uIP v0.7.0.13 (Aug 10, 2011)
+=======================================================
+ Fixes
+ -----
+ 1. Problem: Cont00057768 - iscsiuio logrotate causes daemon failure
+ Cause: The logrotate script will send a SIGUSR1 signal to notify
+ the iscsiuio daemon of such action. However, the daemon
+ wasn't programmed to catch this signal.
+ Change: Restored the catching of this signal
+
uIP v0.7.0.12 (Aug 04, 2011)
=======================================================
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.c open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/iscsid_ipc.c
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.c 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/iscsid_ipc.c 2011-09-01 20:33:53.000000000 -0500
@@ -217,18 +217,23 @@ static int parse_iface(void *arg)
struct in_addr netmask;
int i, prefix_len = 64;
struct ip_addr_mask ipam;
+ struct iface_rec *rec;
data = (iscsid_uip_broadcast_t *) arg;
+ rec = &data->u.iface_rec.rec;
LOG_INFO(PFX "Received request for '%s' to set IP address: '%s' "
- "VLAN: '%d'",
- data->u.iface_rec.rec.netdev,
- data->u.iface_rec.rec.ipaddress, data->u.iface_rec.rec.vlan_id);
+ "VLAN: '%d'", rec->netdev, rec->ipaddress, rec->vlan_id);
- vlan = data->u.iface_rec.rec.vlan_id;
+ vlan = rec->vlan_id;
+ if (vlan && valid_vlan(vlan) == 0) {
+ LOG_ERR(PFX "Invalid VLAN tag: %d", rec->vlan_id);
+ rc = -EIO;
+ goto early_exit;
+ }
/* Detect for CIDR notation and strip off the netmask if present */
- rc = decode_cidr(data->u.iface_rec.rec.ipaddress, &ipam, &prefix_len);
+ rc = decode_cidr(rec->ipaddress, &ipam, &prefix_len);
if (rc && !ipam.ip_type) {
LOG_ERR(PFX "decode_cidr: rc=%d, ipam.ip_type=%d",
rc, ipam.ip_type)
@@ -251,30 +256,29 @@ static int parse_iface(void *arg)
if (i >= 10) {
LOG_WARN(PFX "Could not aquire nic_list_mutex lock");
-
rc = -EIO;
goto early_exit;
}
/* Check if we can find the NIC device using the netdev
* name */
- rc = from_netdev_name_find_nic(data->u.iface_rec.rec.netdev, &nic);
+ rc = from_netdev_name_find_nic(rec->netdev, &nic);
if (rc != 0) {
LOG_WARN(PFX "Couldn't find NIC: %s, creating an instance",
- data->u.iface_rec.rec.netdev);
+ rec->netdev);
nic = nic_init();
if (nic == NULL) {
LOG_ERR(PFX "Couldn't allocate space for NIC %s",
- data->u.iface_rec.rec.netdev);
+ rec->netdev);
rc = -ENOMEM;
goto done;
}
strncpy(nic->eth_device_name,
- data->u.iface_rec.rec.netdev,
+ rec->netdev,
sizeof(nic->eth_device_name));
nic->config_device_name = nic->eth_device_name;
nic->log_name = nic->eth_device_name;
@@ -288,7 +292,7 @@ static int parse_iface(void *arg)
nic_add(nic);
} else {
LOG_INFO(PFX " %s, using existing NIC",
- data->u.iface_rec.rec.netdev);
+ rec->netdev);
}
if (nic->flags & NIC_GOING_DOWN) {
@@ -335,12 +339,12 @@ static int parse_iface(void *arg)
&transport_name_size);
if (strncmp(transport_name,
- data->u.iface_rec.rec.transport_name,
+ rec->transport_name,
transport_name_size) != 0) {
LOG_ERR(PFX "%s Transport name is not equal "
"expected: %s got: %s",
nic->log_name,
- data->u.iface_rec.rec.transport_name,
+ rec->transport_name,
transport_name);
}
} else {
@@ -548,11 +552,10 @@ enable_nic:
LOG_INFO(PFX "ISCSID_UIP_IPC_GET_IFACE: command: %x "
"name: %s, netdev: %s ipaddr: %s vlan: %d transport_name:%s",
- data->header.command, data->u.iface_rec.rec.name,
- data->u.iface_rec.rec.netdev,
- (ipam.ip_type ==
- AF_INET) ? inet_ntoa(ipam.addr4) : ipv6_buf_str, vlan,
- data->u.iface_rec.rec.transport_name);
+ data->header.command, rec->name, rec->netdev,
+ (ipam.ip_type == AF_INET) ? inet_ntoa(ipam.addr4) :
+ ipv6_buf_str,
+ vlan, rec->transport_name);
done:
pthread_mutex_unlock(&nic_list_mutex);
@@ -617,15 +620,15 @@ int process_iscsid_broadcast(int s2)
switch (rc) {
case 0:
rsp.command = cmd;
- rsp.err = ISCISD_UIP_MGMT_IPC_DEVICE_UP;
+ rsp.err = ISCSID_UIP_MGMT_IPC_DEVICE_UP;
break;
case -EAGAIN:
rsp.command = cmd;
- rsp.err = ISCISD_UIP_MGMT_IPC_DEVICE_INITIALIZING;
+ rsp.err = ISCSID_UIP_MGMT_IPC_DEVICE_INITIALIZING;
break;
default:
rsp.command = cmd;
- rsp.err = ISCISD_UIP_MGMT_IPC_ERR;
+ rsp.err = ISCSID_UIP_MGMT_IPC_ERR;
}
break;
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/main.c open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/main.c
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/main.c 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/main.c 2011-09-01 20:33:42.000000000 -0500
@@ -172,10 +172,10 @@ static void main_usage()
printf("\nUsage: %s [OPTION]\n", APP_NAME);
printf("\
-Broadcom uIP daemon.\n\
+iscsiuio daemon.\n\
-f, --foreground make the program run in the foreground\n\
-d, --debug debuglevel print debugging information\n\
- -p, --pid=pidfile use pid file (default %s ).\n\
+ -p, --pid=pidfile use pid file (default %s).\n\
-h, --help display this help and exit\n\
-v, --version display version and exit\n\
", default_pid_filepath);
@@ -336,6 +336,7 @@ int main(int argc, char *argv[])
sigaddset(&set, SIGINT);
sigaddset(&set, SIGQUIT);
sigaddset(&set, SIGTERM);
+ sigaddset(&set, SIGUSR1);
rc = pthread_sigmask(SIG_SETMASK, &set, NULL);
/* Spin off the signal handling thread */
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.c open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/nic_utils.c
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.c 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/nic_utils.c 2011-09-01 20:33:37.000000000 -0500
@@ -473,6 +473,7 @@ static int from_uio_find_associated_eth_
char *search_paths[] = { "/sys/class/uio/uio%i/device/",
"/sys/class/uio/uio%i/device/net"
};
+ int path_to[] = { 5, 1 };
int (*search_filters[]) (const struct dirent *) = {
filter_net_name, filter_dot_out,};
char *(*extract_name[]) (struct dirent ** files) = {
@@ -492,7 +493,7 @@ static int from_uio_find_associated_eth_
/* Build the path to determine uio name */
rc = sprintf(path, search_paths[path_iterator], uio_minor);
- wait_for_file_node_timed(nic, path, 5);
+ wait_for_file_node_timed(nic, path, path_to[path_iterator]);
count = scandir(path, &files,
search_filters[path_iterator], alphasort);
diff -aurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/options.h open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/options.h
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/options.h 2011-09-01 20:28:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/iscsiuio/src/unix/options.h 2011-09-01 20:33:42.000000000 -0500
@@ -78,7 +78,7 @@
#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */
#endif /* ETHERTYPE_VLAN */
-#define APP_NAME "uIP"
+#define APP_NAME "iscsiuio"
/* BUILD_DATE is automatically generated from the Makefile */
#define DEBUG_OFF 0x1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,137 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/include/config.h open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/include/config.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/include/config.h 2011-08-14 22:58:02.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/include/config.h 2011-08-15 00:05:23.000000000 -0500
@@ -22,6 +22,7 @@
#include <netdb.h>
#include "list.h"
+#include "iscsi_net_util.h"
/* ISIDs now have a typed naming authority in them. We use an OUI */
#define DRIVER_ISID_0 0x00
@@ -31,18 +32,33 @@
/* max len of interface */
#define ISCSI_MAX_IFACE_LEN 65
-#if (ISCSID_VERSION == 872) /* 2.0-872 (RHEL 6.0) */
-
#define ISCSI_HWADDRESS_BUF_SIZE 18
#define ISCSI_TRANSPORT_NAME_MAXLEN 16
+#define ISCSI_MAX_STR_LEN 80
typedef struct iface_rec {
struct list_head list;
/* iscsi iface record name */
char name[ISCSI_MAX_IFACE_LEN];
+ uint32_t iface_num;
/* network layer iface name (eth0) */
char netdev[IFNAMSIZ];
char ipaddress[NI_MAXHOST];
+ char subnet_mask[NI_MAXHOST];
+ char gateway[NI_MAXHOST];
+ char bootproto[ISCSI_MAX_STR_LEN];
+ char ipv6_linklocal[NI_MAXHOST];
+ char ipv6_router[NI_MAXHOST];
+ char ipv6_autocfg[NI_MAXHOST];
+ char linklocal_autocfg[NI_MAXHOST];
+ char router_autocfg[NI_MAXHOST];
+ uint16_t vlan_id;
+ uint8_t vlan_priority;
+ char vlan_state[ISCSI_MAX_STR_LEN];
+ char state[ISCSI_MAX_STR_LEN]; /* 0 = disable,
+ * 1 = enable */
+ uint16_t mtu;
+ uint16_t port;
/*
* TODO: we may have to make this bigger and interconnect
* specific for infinniband
@@ -55,40 +71,6 @@ typedef struct iface_rec {
*/
char alias[TARGET_NAME_MAXLEN + 1];
char iname[TARGET_NAME_MAXLEN + 1];
-
- char vlan[ISCSI_MAX_IFACE_LEN];
-} iface_rec_t;
-
-#else /* 2.0-871 (RHEL 5.5) */
-/* number of possible connections per session */
-#define ISCSI_CONN_MAX 1
-
-#define ISCSI_TRANSPORT_NAME_MAXLEN 16
-
-typedef struct iface_rec {
- struct list_head list;
- /* iscsi iface record name */
- char name[ISCSI_MAX_IFACE_LEN];
- /* network layer iface name (eth0) */
- char netdev[IFNAMSIZ];
- char ipaddress[NI_MAXHOST];
-
- /*
- * TODO: we may have to make this bigger and interconnect
- * specific for infinniband
- */
- char hwaddress[ISCSI_MAX_IFACE_LEN];
- char transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
- /*
- * This is only used for boot now, but the iser guys
- * can use this for their virtualization idea.
- */
- char alias[TARGET_NAME_MAXLEN + 1];
- char iname[TARGET_NAME_MAXLEN + 1];
-
- char vlan[ISCSI_MAX_IFACE_LEN];
} iface_rec_t;
-#endif /* ISCSID_VERSION */
-
#endif /* CONFIG_H */
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/include/iscsi_net_util.h open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/include/iscsi_net_util.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/include/iscsi_net_util.h 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/include/iscsi_net_util.h 2011-08-14 23:20:09.000000000 -0500
@@ -0,0 +1,11 @@
+#ifndef __ISCSI_NET_UTIL_h__
+#define __ISCSI_NET_UTIL_h__
+
+#define ISCSI_HWADDRESS_BUF_SIZE 18
+
+extern int net_get_transport_name_from_netdev(char *netdev, char *transport);
+extern int net_get_netdev_from_hwaddress(char *hwaddress, char *netdev);
+extern int net_setup_netdev(char *netdev, char *local_ip, char *mask,
+ char *gateway, char *remote_ip, int needs_bringup);
+
+#endif
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/src/unix/iscsid_ipc.c open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/src/unix/iscsid_ipc.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/iscsiuio/src/unix/iscsid_ipc.c 2011-08-14 22:58:02.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build2/iscsiuio/src/unix/iscsid_ipc.c 2011-08-14 23:37:00.000000000 -0500
@@ -221,18 +221,11 @@ static int parse_iface(void *arg)
data = (iscsid_uip_broadcast_t *) arg;
LOG_INFO(PFX "Received request for '%s' to set IP address: '%s' "
- "VLAN: '%s'",
+ "VLAN: '%d'",
data->u.iface_rec.rec.netdev,
- data->u.iface_rec.rec.ipaddress, data->u.iface_rec.rec.vlan);
+ data->u.iface_rec.rec.ipaddress, data->u.iface_rec.rec.vlan_id);
- vlan = atoi(data->u.iface_rec.rec.vlan);
- if ((valid_vlan(vlan) == 0) &&
- (strcmp(data->u.iface_rec.rec.vlan, "") != 0)) {
- LOG_ERR(PFX "Invalid VLAN tag: '%s'",
- data->u.iface_rec.rec.vlan)
- rc = -EIO;
- goto early_exit;
- }
+ vlan = data->u.iface_rec.rec.vlan_id;
/* Detect for CIDR notation and strip off the netmask if present */
rc = decode_cidr(data->u.iface_rec.rec.ipaddress, &ipam, &prefix_len);
@@ -590,7 +583,7 @@ int process_iscsid_broadcast(int s2)
}
/* This will be freed by parse_iface_thread() */
- data = (iscsid_uip_broadcast_t *) malloc(sizeof(*data));
+ data = (iscsid_uip_broadcast_t *) calloc(1, sizeof(*data));
if (data == NULL) {
LOG_ERR(PFX "Couldn't allocate memory for iface data");
return -ENOMEM;

View File

@ -1,34 +1,200 @@
diff --git a/usr/Makefile b/usr/Makefile
index e9d6bd1..8e505bf 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -42,7 +42,7 @@ ISCSI_LIB_SRCS = iscsi_util.o io.o auth.o login.o log.o md5.o sha1.o iface.o \
iscsid_req.o $(SYSDEPS_SRCS)
# core initiator files
INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o \
- transport.o cxgb3i.o be2iscsi.o
+ transport.o cxgb3i.o be2iscsi.o uip_mgmt_ipc.o
# fw boot files
FW_BOOT_SRCS = $(wildcard ../utils/fwparam_ibft/*.o)
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/include/iscsi_err.h open-iscsi-2.0-872-rc4-bnx2i.build/include/iscsi_err.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/include/iscsi_err.h 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/include/iscsi_err.h 2011-08-14 16:56:54.000000000 -0500
@@ -58,6 +58,8 @@ enum {
ISCSI_ERR_ISNS_QUERY = 25,
/* iSNS registration/deregistration failed */
ISCSI_ERR_ISNS_REG_FAILED = 26,
+ /* Operation failed, but retrying layer may succeed */
+ ISCSI_ERR_AGAIN = 27,
diff --git a/usr/initiator.c b/usr/initiator.c
index 1c9d8b6..8f7a383 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
/* Always last. Indicates end of error code space */
ISCSI_MAX_ERR_VAL,
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/Makefile open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i.base/libiscsi/Makefile 2011-08-14 16:55:23.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/libiscsi/Makefile 2011-08-14 16:56:54.000000000 -0500
@@ -13,7 +13,7 @@ TESTS += tests/test_set_auth tests/test_
COMMON_SRCS = sysdeps.o
# sources shared between iscsid, iscsiadm and iscsistart
-ISCSI_LIB_SRCS = netlink.o transport.o cxgbi.o be2iscsi.o iscsi_timer.o initiator_common.o iscsi_err.o session_info.o iscsi_util.o dcb_app.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
+ISCSI_LIB_SRCS = netlink.o uip_mgmt_ipc.o transport.o cxgbi.o be2iscsi.o iscsi_timer.o initiator_common.o iscsi_err.o session_info.o iscsi_util.o dcb_app.o io.o auth.o discovery.o login.o log.o md5.o sha1.o iface.o idbm.o sysfs.o iscsi_sysfs.o iscsi_net_util.o iscsid_req.o
FW_PARAM_SRCS = fw_entry.o prom_lex.o prom_parse.tab.o fwparam_ppc.o fwparam_sysfs.o
# sources shared with the userspace utils, note we build these separately
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator.c 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.c 2011-08-14 16:56:54.000000000 -0500
@@ -45,6 +45,7 @@
#include "iscsi_sysfs.h"
#include "iscsi_settings.h"
#include "iface.h"
+#include "host.h"
#include "sysdeps.h"
#include "iscsi_err.h"
#define ISCSI_CONN_ERR_REOPEN_DELAY 3
@@ -743,6 +744,38 @@ static int iscsi_conn_connect(struct iscsi_conn *conn, queue_task_t *qtask)
@@ -557,6 +558,48 @@ static int iscsi_conn_connect(struct isc
return 0;
}
+static int __set_net_config(struct iscsi_transport *t,
+ iscsi_session_t *session,
+static void iscsi_uio_poll_login_timedout(void *data)
+{
+ struct queue_task *qtask = data;
+ struct iscsi_conn *conn = qtask->conn;
+ iscsi_session_t *session = conn->session;
+
+ log_debug(3, "timeout waiting for UIO ...\n");
+ mgmt_ipc_write_rsp(qtask, ISCSI_ERR_TRANS_TIMEOUT);
+ conn_delete_timers(conn);
+ __session_destroy(session);
+}
+
+static int iscsi_sched_uio_poll(queue_task_t *qtask)
+{
+ struct iscsi_conn *conn = qtask->conn;
+ struct iscsi_session *session = conn->session;
+ struct iscsi_transport *t = session->t;
+ struct iscsi_ev_context *ev_context;
+
+ if (!t->template->set_net_config)
+ return 0;
+
+ ev_context = iscsi_ev_context_get(conn, 0);
+ if (!ev_context) {
+ /* while reopening the recv pool should be full */
+ log_error("BUG: __session_conn_reopen could "
+ "not get conn context for recv.");
+ return ENOMEM;
+ }
+
+ ev_context->data = qtask;
+ conn->state = ISCSI_CONN_STATE_XPT_WAIT;
+
+ iscsi_sched_ev_context(ev_context, conn, 0, EV_UIO_POLL);
+
+ log_debug(3, "Setting login UIO poll timer %p timeout %d",
+ &conn->login_timer, conn->login_timeout);
+ actor_timer(&conn->login_timer, conn->login_timeout * 1000,
+ iscsi_uio_poll_login_timedout, qtask);
+ return EAGAIN;
+}
+
static void
__session_conn_reopen(iscsi_conn_t *conn, queue_task_t *qtask, int do_stop,
int redirected)
@@ -598,6 +641,11 @@ __session_conn_reopen(iscsi_conn_t *conn
if (!redirected)
session->reopen_cnt++;
+ /* uIP will needs to be re-triggered on the connection re-open */
+ if (iscsi_set_net_config(conn->session->t, conn->session,
+ &conn->session->nrec.iface) != 0)
+ goto queue_reopen;
+
if (iscsi_conn_connect(conn, qtask)) {
delay = ISCSI_CONN_ERR_REOPEN_DELAY;
goto queue_reopen;
@@ -1659,6 +1707,53 @@ failed_login:
}
+static void session_conn_uio_poll(void *data)
+{
+ struct iscsi_ev_context *ev_context = data;
+ iscsi_conn_t *conn = ev_context->conn;
+ struct iscsi_session *session = conn->session;
+ queue_task_t *qtask = ev_context->data;
+ int rc;
+
+ log_debug(4, "retrying uio poll");
+ rc = iscsi_set_net_config(session->t, session,
+ &conn->session->nrec.iface);
+ if (rc != 0) {
+ if (rc == ISCSI_ERR_AGAIN) {
+ ev_context->data = qtask;
+ iscsi_sched_ev_context(ev_context, conn, 2,
+ EV_UIO_POLL);
+ return;
+ } else {
+ log_error("session_conn_uio_poll() "
+ "connection failure [0x%x]", rc);
+ actor_delete(&conn->login_timer);
+ iscsi_login_eh(conn, qtask, ISCSI_ERR_INTERNAL);
+ iscsi_ev_context_put(ev_context);
+ return;
+ }
+ }
+
+ iscsi_ev_context_put(ev_context);
+ actor_delete(&conn->login_timer);
+ log_debug(4, "UIO ready trying connect");
+
+ /* uIP is ready try to connect */
+ if (gettimeofday(&conn->initial_connect_time, NULL))
+ log_error("Could not get initial connect time. If "
+ "login errors iscsid may give up the initial "
+ "login early. You should manually login.");
+
+ conn->state = ISCSI_CONN_STATE_XPT_WAIT;
+ if (iscsi_conn_connect(conn, qtask)) {
+ int delay = ISCSI_CONN_ERR_REOPEN_DELAY;
+
+ log_debug(4, "Waiting %u seconds before trying to reconnect.\n",
+ delay);
+ queue_delayed_reopen(qtask, delay);
+ }
+}
+
static int iscsi_sched_ev_context(struct iscsi_ev_context *ev_context,
struct iscsi_conn *conn, unsigned long tmo,
int event)
@@ -1700,6 +1795,11 @@ static int iscsi_sched_ev_context(struct
ev_context);
actor_schedule(&ev_context->actor);
break;
+ case EV_UIO_POLL:
+ actor_new(&ev_context->actor, session_conn_uio_poll,
+ ev_context);
+ actor_schedule(&ev_context->actor);
+ break;
case EV_CONN_LOGOUT_TIMER:
actor_timer(&ev_context->actor, tmo * 1000,
iscsi_logout_timedout, ev_context);
@@ -1833,7 +1933,17 @@ session_login_task(node_rec_t *rec, queu
conn = &session->conn[0];
qtask->conn = conn;
- if (iscsi_host_set_net_params(&rec->iface, session)) {
+ rc = iscsi_host_set_net_params(&rec->iface, session);
+ if (rc == ISCSI_ERR_AGAIN) {
+ iscsi_sched_uio_poll(qtask);
+ /*
+ * Cannot block iscsid, so caller is going to internally
+ * retry the operation.
+ */
+ qtask->rsp.command = MGMT_IPC_SESSION_LOGIN;
+ qtask->rsp.err = ISCSI_SUCCESS;
+ return ISCSI_SUCCESS;
+ } else if (rc) {
__session_destroy(session);
return ISCSI_ERR_LOGIN;
}
@@ -1990,6 +2100,7 @@ iscsi_host_send_targets(queue_task_t *qt
struct sockaddr_storage *ss)
{
struct iscsi_transport *t;
+ int rc;
t = iscsi_sysfs_get_transport_by_hba(host_no);
if (!t) {
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator_common.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator_common.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator_common.c 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator_common.c 2011-08-14 16:56:54.000000000 -0500
@@ -561,6 +561,36 @@ TODO handle this
return 0;
}
+int iscsi_set_net_config(struct iscsi_transport *t, iscsi_session_t *session,
+ struct iface_rec *iface)
+{
+ if (t->template->set_net_config) {
@ -58,37 +224,43 @@ index 1c9d8b6..8f7a383 100644
+ return 0;
+}
+
+
static void
__session_conn_reopen(iscsi_conn_t *conn, queue_task_t *qtask, int do_stop,
int redirected)
@@ -784,6 +817,11 @@ __session_conn_reopen(iscsi_conn_t *conn, queue_task_t *qtask, int do_stop,
if (!redirected)
session->reopen_cnt++;
+ /* uIP will needs to be re-triggered on the connection re-open */
+ if (__set_net_config(conn->session->t, conn->session,
+ &conn->session->nrec.iface) != 0)
+ goto queue_reopen;
+
if (iscsi_conn_connect(conn, qtask)) {
delay = ISCSI_CONN_ERR_REOPEN_DELAY;
goto queue_reopen;
@@ -2130,6 +2168,10 @@ static int iface_set_param(struct iscsi_transport *t, struct iface_rec *iface,
int iscsi_host_set_net_params(struct iface_rec *iface,
struct iscsi_session *session)
{
@@ -582,6 +612,10 @@ int iscsi_host_set_net_params(struct ifa
return EINVAL;
}
+ rc = __set_net_config(t, session, iface);
+ rc = iscsi_set_net_config(t, session, iface);
+ if (rc != 0)
+ return rc;
+
rc = __iscsi_host_set_param(t, session->hostno,
rc = host_set_param(t, session->hostno,
ISCSI_HOST_PARAM_IPADDRESS,
iface->ipaddress, ISCSI_STRING);
diff --git a/usr/iscsid_req.c b/usr/iscsid_req.c
index 5280a0a..6eb8b1d 100644
--- a/usr/iscsid_req.c
+++ b/usr/iscsid_req.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/initiator.h 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/initiator.h 2011-08-14 16:58:14.000000000 -0500
@@ -83,6 +83,7 @@ typedef enum iscsi_event_e {
EV_CONN_LOGOUT_TIMER,
EV_CONN_STOP,
EV_CONN_LOGIN,
+ EV_UIO_POLL,
} iscsi_event_e;
struct queue_task;
@@ -353,5 +354,8 @@ extern void iscsi_copy_operational_param
extern int iscsi_setup_authentication(struct iscsi_session *session,
struct iscsi_auth_config *auth_cfg);
extern int iscsi_setup_portal(struct iscsi_conn *conn, char *address, int port);
+extern int iscsi_set_net_config(struct iscsi_transport *t,
+ iscsi_session_t *session,
+ struct iface_rec *iface);
#endif /* INITIATOR_H */
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsid_req.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsid_req.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsid_req.c 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsid_req.c 2011-08-14 16:56:54.000000000 -0500
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include <string.h>
@ -97,25 +269,24 @@ index 5280a0a..6eb8b1d 100644
#include <sys/un.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -31,6 +32,7 @@
#include "mgmt_ipc.h"
@@ -32,6 +33,7 @@
#include "iscsi_util.h"
#include "config.h"
#include "iscsi_err.h"
+#include "uip_mgmt_ipc.h"
static void iscsid_startup(void)
{
@@ -51,7 +53,8 @@ static void iscsid_startup(void)
@@ -54,7 +56,7 @@ static void iscsid_startup(void)
#define MAXSLEEP 128
-static mgmt_ipc_err_e iscsid_connect(int *fd, int start_iscsid)
+static mgmt_ipc_err_e ipc_connect(int *fd, char *unix_sock_name,
+ int start_iscsid)
-static int iscsid_connect(int *fd, int start_iscsid)
+static int ipc_connect(int *fd, char *unix_sock_name, int start_iscsid)
{
int nsec;
struct sockaddr_un addr;
@@ -64,8 +67,8 @@ static mgmt_ipc_err_e iscsid_connect(int *fd, int start_iscsid)
@@ -67,8 +69,8 @@ static int iscsid_connect(int *fd, int s
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_LOCAL;
@ -126,23 +297,24 @@ index 5280a0a..6eb8b1d 100644
/*
* Trying to connect with exponential backoff
*/
@@ -93,6 +96,11 @@ static mgmt_ipc_err_e iscsid_connect(int *fd, int start_iscsid)
return MGMT_IPC_ERR_ISCSID_NOTCONN;
@@ -96,6 +98,11 @@ static int iscsid_connect(int *fd, int s
return ISCSI_ERR_ISCSID_NOTCONN;
}
+static mgmt_ipc_err_e iscsid_connect(int *fd, int start_iscsid)
+static int iscsid_connect(int *fd, int start_iscsid)
+{
+ return ipc_connect(fd, ISCSIADM_NAMESPACE, start_iscsid);
+}
+
mgmt_ipc_err_e iscsid_request(int *fd, iscsiadm_req_t *req, int start_iscsid)
int iscsid_request(int *fd, iscsiadm_req_t *req, int start_iscsid)
{
int err;
@@ -190,6 +198,72 @@ int iscsid_req_by_sid(iscsiadm_cmd_e cmd, int sid)
@@ -192,3 +199,81 @@ int iscsid_req_by_sid(iscsiadm_cmd_e cmd
return err;
return iscsid_req_wait(cmd, fd);
}
+static mgmt_ipc_err_e uip_connect(int *fd)
+
+static int uip_connect(int *fd)
+{
+ return ipc_connect(fd, ISCSID_UIP_NAMESPACE, 0);
+}
@ -161,14 +333,18 @@ index 5280a0a..6eb8b1d 100644
+ return err;
+ }
+
+ log_debug(3, "connected to uIP daemon");
+
+ /* Send the data to uIP */
+ if ((err = write(fd, buf, buf_len)) != buf_len) {
+ log_error("got write error (%d/%d), daemon died?",
+ err, errno);
+ close(fd);
+ return -EIO;
+ return ISCSI_ERR_ISCSID_COMM_ERR;
+ }
+
+ log_debug(3, "send iface config to uIP daemon");
+
+ /* Set the socket to a non-blocking read, this way if there are
+ * problems waiting for uIP, iscsid can bailout early */
+ flags = fcntl(fd, F_GETFL, 0);
@ -179,7 +355,7 @@ index 5280a0a..6eb8b1d 100644
+ log_error("could not set uip broadcast to non-blocking: %d",
+ errno);
+ close(fd);
+ return -EIO;
+ return ISCSI_ERR;
+ }
+
+#define MAX_UIP_BROADCAST_READ_TRIES 3
@ -187,8 +363,10 @@ index 5280a0a..6eb8b1d 100644
+ /* Wait for the response */
+ err = read(fd, &rsp, sizeof(rsp));
+ if (err == sizeof(rsp)) {
+ log_debug(3, "Broadcasted to uIP with length: %ld\n",
+ buf_len);
+ log_debug(3, "Broadcasted to uIP with length: %ld "
+ "cmd: 0x%x rsp: 0x%x\n", buf_len,
+ rsp.command, rsp.err);
+ err = 0;
+ break;
+ } else if((err == -1) && (errno == EAGAIN)) {
+ usleep(250000);
@ -196,45 +374,69 @@ index 5280a0a..6eb8b1d 100644
+ } else {
+ log_error("Could not read response (%d/%d), daemon died?",
+ err, errno);
+ err = ISCSI_ERR;
+ break;
+ }
+ }
+
+ if(count == MAX_UIP_BROADCAST_READ_TRIES)
+ log_error("Could not broadcast to uIP");
+
+ close(fd);
+
+ return 0;
+ if (count == MAX_UIP_BROADCAST_READ_TRIES) {
+ log_error("Could not broadcast to uIP after %d tries",
+ count);
+ err = ISCSI_ERR_AGAIN;
+ } else if (rsp.err != ISCISD_UIP_MGMT_IPC_DEVICE_UP) {
+ log_debug(3, "Device is not ready\n");
+ err = ISCSI_ERR_AGAIN;
+ }
+
void iscsid_handle_error(mgmt_ipc_err_e err)
{
static char *err_msgs[] = {
diff --git a/usr/iscsid_req.h b/usr/iscsid_req.h
index 3bba2f4..e2cf1c3 100644
--- a/usr/iscsid_req.h
+++ b/usr/iscsid_req.h
@@ -34,4 +34,6 @@ extern int iscsid_req_by_rec(int cmd, struct node_rec *rec);
+ close(fd);
+ return err;
+}
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsid_req.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsid_req.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsid_req.h 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsid_req.h 2011-08-14 16:56:54.000000000 -0500
@@ -33,4 +33,6 @@ extern int iscsid_req_by_rec(int cmd, st
extern int iscsid_req_by_sid_async(int cmd, int sid, int *fd);
extern int iscsid_req_by_sid(int cmd, int sid);
+extern int uip_broadcast(void *buf, size_t buf_len);
+
#endif
diff --git a/usr/transport.c b/usr/transport.c
index c0789bb..aa0395c 100644
--- a/usr/transport.c
+++ b/usr/transport.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsi_err.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsi_err.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/iscsi_err.c 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/iscsi_err.c 2011-08-14 16:56:54.000000000 -0500
@@ -49,6 +49,7 @@ static char *iscsi_err_msgs[] = {
/* 24 */ "iSCSI login failed due to authorization failure",
/* 25 */ "iSNS query failed",
/* 26 */ "iSNS registration failed",
+ /* 27 */ "Retryable failure",
};
char *iscsi_err_to_str(int err)
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/Makefile open-iscsi-2.0-872-rc4-bnx2i.build/usr/Makefile
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/Makefile 2011-08-14 16:55:23.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/Makefile 2011-08-14 16:58:57.000000000 -0500
@@ -42,7 +42,8 @@ SYSDEPS_SRCS = $(wildcard ../utils/sysde
ISCSI_LIB_SRCS = iscsi_util.o io.o auth.o iscsi_timer.o login.o log.o md5.o \
sha1.o iface.o idbm.o sysfs.o host.o session_info.o iscsi_sysfs.o \
iscsi_net_util.o iscsid_req.o transport.o cxgbi.o be2iscsi.o \
- initiator_common.o iscsi_err.o $(IPC_OBJ) $(SYSDEPS_SRCS) $(DCB_OBJ)
+ initiator_common.o iscsi_err.o uip_mgmt_ipc.o \
+ $(IPC_OBJ) $(SYSDEPS_SRCS) $(DCB_OBJ)
# core initiator files
INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/transport.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/transport.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/transport.c 2011-08-14 16:49:44.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/transport.c 2011-08-14 16:56:54.000000000 -0500
@@ -25,6 +25,7 @@
#include "log.h"
#include "iscsi_util.h"
#include "iscsi_sysfs.h"
+#include "uip_mgmt_ipc.h"
#include "cxgb3i.h"
#include "cxgbi.h"
#include "be2iscsi.h"
@@ -58,6 +59,7 @@ struct iscsi_transport_template bnx2i = {
@@ -67,6 +68,7 @@ struct iscsi_transport_template bnx2i =
.ep_connect = ktransport_ep_connect,
.ep_poll = ktransport_ep_poll,
.ep_disconnect = ktransport_ep_disconnect,
@ -242,10 +444,9 @@ index c0789bb..aa0395c 100644
};
struct iscsi_transport_template be2iscsi = {
diff --git a/usr/transport.h b/usr/transport.h
index 5ceedb3..2ec903c 100644
--- a/usr/transport.h
+++ b/usr/transport.h
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/transport.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/transport.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/transport.h 2011-08-14 16:49:34.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/transport.h 2011-08-14 16:56:54.000000000 -0500
@@ -35,6 +35,9 @@ struct iscsi_transport_template {
int (*ep_poll) (struct iscsi_conn *conn, int timeout_ms);
void (*ep_disconnect) (struct iscsi_conn *conn);
@ -256,11 +457,9 @@ index 5ceedb3..2ec903c 100644
};
/* represents data path provider */
diff --git a/usr/uip_mgmt_ipc.c b/usr/uip_mgmt_ipc.c
new file mode 100644
index 0000000..73b1632
--- /dev/null
+++ b/usr/uip_mgmt_ipc.c
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/uip_mgmt_ipc.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/uip_mgmt_ipc.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/uip_mgmt_ipc.c 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/uip_mgmt_ipc.c 2011-08-14 16:56:54.000000000 -0500
@@ -0,0 +1,41 @@
+/*
+ * uIP iSCSI Daemon/Admin Management IPC
@ -303,12 +502,10 @@ index 0000000..73b1632
+ sizeof(iscsid_uip_broadcast_header_t) +
+ sizeof(*iface));
+}
diff --git a/usr/uip_mgmt_ipc.h b/usr/uip_mgmt_ipc.h
new file mode 100644
index 0000000..dd49c0b
--- /dev/null
+++ b/usr/uip_mgmt_ipc.h
@@ -0,0 +1,71 @@
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/uip_mgmt_ipc.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/uip_mgmt_ipc.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/uip_mgmt_ipc.h 1969-12-31 18:00:00.000000000 -0600
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/uip_mgmt_ipc.h 2011-08-14 16:56:54.000000000 -0500
@@ -0,0 +1,73 @@
+/*
+ * uIP iSCSI Daemon/Admin Management IPC
+ *
@ -366,6 +563,8 @@ index 0000000..dd49c0b
+ ISCISD_UIP_MGMT_IPC_ERR = 1,
+ ISCISD_UIP_MGMT_IPC_ERR_NOT_FOUND = 2,
+ ISCISD_UIP_MGMT_IPC_ERR_NOMEM = 3,
+ ISCISD_UIP_MGMT_IPC_DEVICE_UP = 4,
+ ISCISD_UIP_MGMT_IPC_DEVICE_INITIALIZING = 5,
+} iscsid_uip_mgmt_ipc_err_e;
+
+/* IPC Response */
@ -380,6 +579,3 @@ index 0000000..dd49c0b
+
+
+#endif /* UIP_MGMT_IPC_H */
--
1.6.6.1

View File

@ -1,6 +1,6 @@
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/etc/iscsid.conf open-iscsi-2.0-872-rc3-bnx2i.diff/etc/iscsid.conf
--- open-iscsi-2.0-872-rc3-bnx2i/etc/iscsid.conf 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/etc/iscsid.conf 2010-07-11 03:57:57.000000000 -0500
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/etc/iscsid.conf open-iscsi-2.0-872-rc4-bnx2i.build/etc/iscsid.conf
--- open-iscsi-2.0-872-rc4-bnx2i.base/etc/iscsid.conf 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/etc/iscsid.conf 2011-08-14 16:37:47.000000000 -0500
@@ -17,10 +17,10 @@
# maintainers.
#
@ -23,9 +23,9 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/etc/iscsid.conf open-iscsi-2.0-872-rc3-b
+# To manually startup the session set to "manual". The default is automatic.
+node.startup = automatic
# *************
@@ -255,29 +255,26 @@ node.conn[0].iscsi.MaxXmitDataSegmentLen
# For "automatic" startup nodes, setting this to "Yes" will try logins on each
# available iface until one succeeds, and then stop. The default "No" will try
@@ -259,28 +259,27 @@ node.conn[0].iscsi.MaxXmitDataSegmentLen
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# To allow the targets to control the setting of the digest checking,
@ -34,36 +34,36 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/etc/iscsid.conf open-iscsi-2.0-872-rc3-b
+# the following lines (Data digests are not supported.):
#node.conn[0].iscsi.HeaderDigest = CRC32C,None
-#node.conn[0].iscsi.DataDigest = CRC32C,None
+
#
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of disabling the checking,
-# uncomment one or both of the following lines:
+# uncomment the following lines:
+# uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None,CRC32C
-#node.conn[0].iscsi.DataDigest = None,CRC32C
#
# To enable CRC32C digest checking for the header and/or data part of
-# iSCSI PDUs, uncomment one or both of the following lines:
+# iSCSI PDUs, uncomment the following lines:
+# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = CRC32C
-#node.conn[0].iscsi.DataDigest = CRC32C
#
# To disable digest checking for the header and/or data part of
-# iSCSI PDUs, uncomment one or both of the following lines:
+# iSCSI PDUs, uncomment the following lines:
+# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None
-#node.conn[0].iscsi.DataDigest = None
#
# The default is to never use DataDigests or HeaderDigests.
#
-
+node.conn[0].iscsi.HeaderDigest = None
#************
# Workarounds
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff/README
--- open-iscsi-2.0-872-rc3-bnx2i/README 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/README 2010-07-11 03:57:57.000000000 -0500
# For multipath configurations, you may want more than one session to be
# created on each iface record. If node.session.nr_sessions is greater
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/README open-iscsi-2.0-872-rc4-bnx2i.build/README
--- open-iscsi-2.0-872-rc4-bnx2i.base/README 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/README 2011-08-14 16:34:12.000000000 -0500
@@ -74,11 +74,6 @@ the cache sync command will fail.
- iscsiadm's -P 3 option will not print out scsi devices.
- iscsid will not automatically online devices.
@ -76,7 +76,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
By default the kernel source found at
/lib/modules/`uname -a`/build
will be used to compile the open-iscsi modules. To specify a different
@@ -907,7 +902,7 @@ Red Hat or Fedora:
@@ -975,7 +970,7 @@ Red Hat or Fedora:
-----------------
To start open-iscsi in Red Hat/Fedora you can do:
@ -85,7 +85,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
To get open-iscsi to automatically start at run time you may have to
run:
@@ -1115,6 +1110,8 @@ iscsid will only perform rediscovery whe
@@ -1183,6 +1178,8 @@ iscsid will only perform rediscovery whe
# linux-isns (SLES's iSNS server) where it sometimes does not send SCN
# events in the proper format, so they may not get handled.
@ -94,11 +94,10 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
Example:
--------
Only in open-iscsi-2.0-872-rc3-bnx2i.diff/: README.orig
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.c open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.c
--- open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.c 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.c 2010-07-11 03:57:57.000000000 -0500
@@ -346,9 +346,13 @@ idbm_recinfo_node(node_rec_t *r, recinfo
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c 2011-08-14 16:34:12.000000000 -0500
@@ -373,9 +373,13 @@ idbm_recinfo_node(node_rec_t *r, recinfo
IDBM_SHOW, "None", "CRC32C", "CRC32C,None",
"None,CRC32C", num, 1);
sprintf(key, CONN_DATA_DIGEST, i);

View File

@ -1,16 +1,16 @@
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/doc/iscsiadm.8 open-iscsi-2.0-872-rc3-bnx2i.diff/doc/iscsiadm.8
--- open-iscsi-2.0-872-rc3-bnx2i/doc/iscsiadm.8 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/doc/iscsiadm.8 2010-07-11 04:00:35.000000000 -0500
@@ -51,7 +51,7 @@ display help text and exit
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/doc/iscsiadm.8 open-iscsi-2.0-872-rc4-bnx2i.build/doc/iscsiadm.8
--- open-iscsi-2.0-872-rc4-bnx2i.base/doc/iscsiadm.8 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/doc/iscsiadm.8 2011-08-14 16:41:07.000000000 -0500
@@ -57,7 +57,7 @@ MAC address of a scsi host.
.TP
\fB\-I\fR, \fB\-\-interface\fI[iface]\fR
\fB\-I\fR, \fB\-\-interface=\fI[iface]\fR
The interface argument specifies the iSCSI interface to use for the operation.
-iSCSI interfaces (iface) are defined in /etc/iscsi/ifaces. For hardware
+iSCSI interfaces (iface) are defined in /var/lib/iscsi/ifaces. For hardware
iSCSI (qla4xxx) the iface config must have the hardware address
(iface.hwaddress = port's MAC address)
and the driver/transport_name (iface.transport_name). The iface's name is
@@ -128,7 +128,7 @@ If no other options are specified: for \
@@ -134,7 +134,7 @@ If no other options are specified: for \
of their respective records are displayed; for \fIsession\fR, all active
sessions and connections are displayed; for \fIfw\fR, all boot firmware
values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; and
@ -19,7 +19,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/doc/iscsiadm.8 open-iscsi-2.0-872-rc3-bn
.TP
\fB\-n\fR, \fB\-\-name=\fIname\fR
@@ -336,10 +336,10 @@ The configuration file read by \fBiscsid
@@ -503,10 +503,10 @@ The configuration file read by \fBiscsid
The file containing the iSCSI InitiatorName and InitiatorAlias read by
\fBiscsid\fR and \fBiscsiadm\fR on startup.
.TP
@ -32,10 +32,9 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/doc/iscsiadm.8 open-iscsi-2.0-872-rc3-bn
This directory contains the portals.
.SH "SEE ALSO"
Only in open-iscsi-2.0-872-rc3-bnx2i.diff/doc: iscsiadm.8.orig
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff/README
--- open-iscsi-2.0-872-rc3-bnx2i/README 2010-07-11 03:58:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/README 2010-07-11 03:59:00.000000000 -0500
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/README open-iscsi-2.0-872-rc4-bnx2i.build/README
--- open-iscsi-2.0-872-rc4-bnx2i.base/README 2011-08-14 16:41:23.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/README 2011-08-14 16:42:47.000000000 -0500
@@ -144,10 +144,10 @@ available on all Linux installations.
The database contains two tables:
@ -50,16 +49,16 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
The iscsiadm utility is a command-line tool to manage (update, delete,
insert, query) the persistent database.
@@ -420,7 +420,7 @@ a scsi_host per HBA port).
@@ -422,7 +422,7 @@ a scsi_host per HBA port).
To manage both types of initiator stacks, iscsiadm uses the interface (iface)
structure. For each HBA port or for software iscsi for each network
device (ethX) or NIC, that you wish to bind sessions to you must create
-a iface config /etc/iscsi/ifaces.
+a iface config /var/lib/iscsi/ifaces.
Running:
Prep:
@@ -428,29 +428,29 @@ Running:
@@ -456,29 +456,29 @@ Running:
iface0 qla4xxx,00:c0:dd:08:63:e8,20.15.0.7,default,iqn.2005-06.com.redhat:madmax
iface1 qla4xxx,00:c0:dd:08:63:ea,20.15.0.9,default,iqn.2005-06.com.redhat:madmax
@ -94,8 +93,8 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
iface.transport_name = tcp
iface.hwaddress = 00:C0:DD:08:63:E7
@@ -499,7 +499,7 @@ iser iser,<empty>,<empty>,<empty>,<empty
cxgb3i.00:07:43:05:97:07 cxgb3i,00:07:43:05:97:07,<empty>,<empty>,<empty>
@@ -528,7 +528,7 @@ cxgb3i.00:07:43:05:97:07 cxgb3i,00:07:43
qla4xxx.00:0e:1e:04:8b:2e qla4xxx,00:0e:1e:04:8b:2e,<empty>,<empty>,<empty>
-Will report iface configurations that are setup in /etc/iscsi/ifaces.
@ -103,16 +102,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
The format is:
iface_name transport_name,hwaddress,ipaddress,net_ifacename,initiatorname
@@ -515,7 +515,7 @@ default one in /etc/iscsi/initiatorname.
-To display these values in a more friendly run:
+To display these values in a more friendly way run:
iscsiadm -m iface -I cxgb3i.00:07:43:05:97:07
# BEGIN RECORD 2.0-871
@@ -553,7 +553,7 @@ need a seperate network connection to th
@@ -614,7 +614,7 @@ need a seperate network connection to th
*This will be fixed in the next version of open-iscsi*
For compatibility reasons, when you run iscsiadm to do discovery, it
@ -121,7 +111,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
tcp for the iface.transport and it will bind the portals that are discovered
so that they will be logged in through those ifaces. This behavior can also
be overriden by passing in the interfaces you want to use. For the case
@@ -571,7 +571,7 @@ we do not bind a session to a iface, the
@@ -632,7 +632,7 @@ we do not bind a session to a iface, the
iscsiadm -m discoverydb -t st -p ip:port -I default --discover -P 1
@ -130,7 +120,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
not pass anything into iscsiadm, running iscsiadm will do the default
behavior, where we allow the network subsystem to decide which
device to use.
@@ -613,13 +613,13 @@ To now log into targets it is the same a
@@ -674,7 +674,7 @@ To now log into targets it is the same a
./iscsiadm -m discoverydb -t st -p 192.168.1.1:3260 --discover
@ -139,14 +129,16 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
ID [portal = 192.168.1.1:3260 and type = sendtargets. If found it
will perform discovery using the settings stored in the record.
If a record does not exist, it will be created using the iscsid.conf
discovery settings.
@@ -683,7 +683,7 @@ To now log into targets it is the same a
The argument to -p may also be a hostname instead of an address.
./iscsiadm -m discoverydb -t st -p smoehost --discover
- For the ifaces, iscsiadm will first search /etc/iscsi/ifaces for
+ For the ifaces, iscsiadm will first search /var/lib/iscsi/ifaces for
interfaces using software iscsi. If any are found then nodes found
during discovery will be setup so that they can logged in through
those interfaces. To specify a specific iface, pass the
@@ -675,7 +675,7 @@ To now log into targets it is the same a
@@ -739,7 +739,7 @@ To now log into targets it is the same a
This command will perform discovery, but not manipulate the node DB.
- SendTargets iSCSI Discovery with a specific interface. If you
@ -155,7 +147,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
then you can pass them in during discovery:
./iscsiadm -m discoverydb -t sendtargets -p 192.168.1.1:3260 \
@@ -982,8 +982,8 @@ where targetname is the name of the targ
@@ -1050,8 +1050,8 @@ where targetname is the name of the targ
and port of the portal. tpgt, is the portal group tag of
the portal, and is not used in iscsiadm commands except for static
record creation. And iface name is the name of the iscsi interface
@ -166,7 +158,7 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
Default here is iscsi_tcp/tcp to be used over which ever NIC the
network layer decides is best.
@@ -1098,7 +1098,7 @@ If set, iscsid will perform discovery to
@@ -1166,7 +1166,7 @@ If set, iscsid will perform discovery to
discovery.isns.discoveryd_poll_inval or
discovery.sendtargets.discoveryd_poll_inval seconds,
and it will log into any portals found from the discovery source using
@ -175,11 +167,10 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/README open-iscsi-2.0-872-rc3-bnx2i.diff
Note that for iSNS the poll_interval does not have to be set. If not set,
iscsid will only perform rediscovery when it gets a SCN from the server.
Only in open-iscsi-2.0-872-rc3-bnx2i.diff/: README.orig
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.c open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.c
--- open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.c 2010-07-11 03:58:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.c 2010-07-11 03:59:00.000000000 -0500
@@ -2235,9 +2235,9 @@ free_info:
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.c 2011-08-14 16:41:23.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.c 2011-08-14 16:41:07.000000000 -0500
@@ -2359,9 +2359,9 @@ free_info:
int idbm_init(idbm_get_config_file_fn *fn)
{
/* make sure root db dir is there */
@ -192,10 +183,9 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.c open-iscsi-2.0-872-rc3-bnx2i.
errno);
return errno;
}
Only in open-iscsi-2.0-872-rc3-bnx2i.diff/usr: idbm.c.orig
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.h open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.h
--- open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.h 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/usr/idbm.h 2010-07-11 03:59:00.000000000 -0500
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/idbm.h 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/idbm.h 2011-08-14 16:41:07.000000000 -0500
@@ -27,12 +27,15 @@
#include "initiator.h"
#include "config.h"
@ -218,9 +208,9 @@ diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/idbm.h open-iscsi-2.0-872-rc3-bnx2i.
#define ST_CONFIG_NAME "st_config"
#define ISNS_CONFIG_NAME "isns_config"
diff -aurp open-iscsi-2.0-872-rc3-bnx2i/usr/iface.h open-iscsi-2.0-872-rc3-bnx2i.diff/usr/iface.h
--- open-iscsi-2.0-872-rc3-bnx2i/usr/iface.h 2010-07-11 03:45:50.000000000 -0500
+++ open-iscsi-2.0-872-rc3-bnx2i.diff/usr/iface.h 2010-07-11 03:59:00.000000000 -0500
diff -aurp open-iscsi-2.0-872-rc4-bnx2i.base/usr/iface.h open-iscsi-2.0-872-rc4-bnx2i.build/usr/iface.h
--- open-iscsi-2.0-872-rc4-bnx2i.base/usr/iface.h 2011-08-14 16:33:53.000000000 -0500
+++ open-iscsi-2.0-872-rc4-bnx2i.build/usr/iface.h 2011-08-14 16:41:07.000000000 -0500
@@ -20,7 +20,9 @@
#ifndef ISCSI_IFACE_H
#define ISCSI_IFACE_H

View File

@ -3,29 +3,49 @@
Summary: iSCSI daemon and utility programs
Name: iscsi-initiator-utils
Version: 6.2.0.872
Release: 12%{?dist}
Release: 13%{?dist}
Source0: http://people.redhat.com/mchristi/iscsi/rhel6.0/source/open-iscsi-2.0-872-rc4-bnx2i.tar.gz
Source1: iscsid.init
Source2: iscsidevs.init
Source3: 04-iscsi
# sync brcm to 0.7.0.12
Patch0: iscsi-initiator-utils-sync-uio-0.7.0.8.patch
# sync iscsi tools to upstream commit e8c5b1d34ee5ce0a755ff54518829156dfa5fabe
Patch1: iscsi-initiator-utils-sync-iscsi.patch
# Add Red Hat specific info to docs.
Patch0: iscsi-initiator-utils-update-initscripts-and-docs.patch
Patch2: iscsi-initiator-utils-update-initscripts-and-docs.patch
# Upstream uses /etc/iscsi for iscsi db info, but use /var/lib/iscsi.
Patch1: iscsi-initiator-utils-use-var-for-config.patch
Patch3: iscsi-initiator-utils-use-var-for-config.patch
# Add redhat.com string to default initiator name.
Patch2: iscsi-initiator-utils-use-red-hat-for-name.patch
Patch4: iscsi-initiator-utils-use-red-hat-for-name.patch
# Add a lib for use by anaconda.
Patch3: iscsi-initiator-utils-add-libiscsi.patch
Patch5: iscsi-initiator-utils-add-libiscsi.patch
# Add bnx2i support.
Patch4: iscsi-initiator-utils-uip-mgmt.patch
# disable isns for libiscsi (libiscsi does not support isns)
Patch5: iscsi-initiator-utils-disable-isns-for-lib.patch
# fix libiscsi get firmware sysfs init
Patch6: iscsi-initiator-utils-fix-lib-sysfs-init.patch
# fix race between uip and iscsid startup
Patch7: iscsi-initiator-utils-fix-uip-init-race.patch
Patch6: iscsi-initiator-utils-uip-mgmt.patch
# Don't compile iscsistart as static
Patch8: iscsi-initiator-utils-dont-use-static.patch
Patch7: iscsi-initiator-utils-dont-use-static.patch
# Remove the OFFLOAD_BOOT_SUPPORTED #ifdef.
Patch8: iscsi-initiator-utils-remove-the-offload-boot-supported-ifdef.patch
# brcm uio: handle the different iface_rec structures in iscsid and brcm.
Patch9: iscsi-initiator-utils-uio-handle-different-iface_rec.patch
# Document missing brcm arguments
Patch10: iscsi-initiator-utils-brcm-man.patch
# setup default ifaces for all ifaces in kernel
Patch11: iscsi-initiator-utils-fix-default-bindings.patch
# fix iscsiadm return value/msg when login fails
Patch12: iscsi-initiator-utils-fix-iscsiadm-return.patch
# don't use openssl-devel
Patch13: iscsi-initiator-utils-dont-use-openssl.patch
# sync uio to 0.7.0.14
Patch14: iscsi-initiator-utils-sync-uio-0.7.0.14.patch
# fix nl msglen
Patch15: iscsi-initiator-utils-fix-nlmsglen.patch
# fixes for offload iface support
Patch16: iscsi-initiator-utils-ofl-iface-fixes.patch
# fix ipv6 ibft/firmware boot
Patch17: iscsi-initiator-utils-fix-ipv6-boot.patch
# add rhel version info to iscsi tools
Patch18: iscsi-initiator-utils-add-rh-ver.patch
Group: System Environment/Daemons
@ -55,19 +75,29 @@ developing applications that use %{name}.
%prep
%setup -q -n open-iscsi-2.0-872-rc4-bnx2i
%patch0 -p1 -b .update-initscripts-and-docs
%patch1 -p1 -b .use-var-for-config
%patch2 -p1 -b .use-red-hat-for-name
%patch3 -p1 -b .add-libiscsi
%patch4 -p1 -b .uip-mgmt
%patch5 -p1 -b .disable-isns-for-lib
%patch6 -p1 -b .fix-lib-sysfs-init
%patch7 -p1 -b .fix-uip-init-race
%patch8 -p1 -b .dont-use-static
%patch0 -p1 -b .sync-uio-0.7.0.8
%patch1 -p1 -b .sync-iscsi
%patch2 -p1 -b .update-initscripts-and-docs
%patch3 -p1 -b .use-var-for-config
%patch4 -p1 -b .use-red-hat-for-name
%patch5 -p1 -b .add-libiscsi
%patch6 -p1 -b .uip-mgmt
%patch7 -p1 -b .dont-use-static
%patch8 -p1 -b .remove-the-offload-boot-supported-ifdef
%patch9 -p1 -b .uio-handle-different-iface_rec
%patch10 -p1 -b .brcm-man
%patch11 -p1 -b .fix-default-bindings
%patch12 -p1 -b .fix-iscsiadm-return
%patch13 -p1 -b .dont-use-openssl
%patch14 -p1 -b .sync-uio-0.7.0.14
%patch15 -p1 -b .fix-nlmsglen
%patch16 -p1 -b .ofl-iface-fixes
%patch17 -p1 -b .fix-ipv6-boot
%patch18 -p1 -b .add-rh-ver
%build
cd utils/open-isns
./configure
./configure --with-security=no
make OPTFLAGS="%{optflags}"
cd ../../
make OPTFLAGS="%{optflags}" -C utils/sysdeps
@ -75,6 +105,13 @@ make OPTFLAGS="%{optflags}" -C utils/fwparam_ibft
make OPTFLAGS="%{optflags}" -C usr
make OPTFLAGS="%{optflags}" -C utils
make OPTFLAGS="%{optflags}" -C libiscsi
cd iscsiuio
chmod u+x configure
./configure --enable-debug
make OPTFLAGS="%{optflags}"
cd ..
pushd libiscsi
python setup.py build
touch -r libiscsi.doxy html/*
@ -87,6 +124,7 @@ mkdir -p $RPM_BUILD_ROOT/sbin
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man8
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir -p $RPM_BUILD_ROOT/etc/iscsi
mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
mkdir -p $RPM_BUILD_ROOT/etc/NetworkManager/dispatcher.d
mkdir -p $RPM_BUILD_ROOT/var/lib/iscsi
mkdir -p $RPM_BUILD_ROOT/var/lib/iscsi/nodes
@ -108,6 +146,9 @@ install -p -m 644 doc/iscsid.8 $RPM_BUILD_ROOT/%{_mandir}/man8
install -p -m 644 etc/iscsid.conf $RPM_BUILD_ROOT%{_sysconfdir}/iscsi
install -p -m 644 doc/iscsistart.8 $RPM_BUILD_ROOT/%{_mandir}/man8
install -p -m 644 doc/iscsi-iname.8 $RPM_BUILD_ROOT/%{_mandir}/man8
install -p -m 644 iscsiuio/docs/iscsiuio.8 $RPM_BUILD_ROOT/%{_mandir}/man8
install -p -m 644 iscsiuio/iscsiuiolog $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -p -m 755 iscsiuio/src/unix/iscsiuio $RPM_BUILD_ROOT/sbin
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/iscsid
install -p -m 755 %{SOURCE2} $RPM_BUILD_ROOT%{_initrddir}/iscsi
@ -179,6 +220,7 @@ fi
%{_libdir}/libiscsi.so.0
%{python_sitearch}/libiscsimodule.so
%{_mandir}/man8/*
%{_sysconfdir}/logrotate.d/iscsiuiolog
%files devel
%defattr(-,root,root,-)
@ -187,6 +229,9 @@ fi
%{_includedir}/libiscsi.h
%changelog
* Tue Oct 18 2011 Mike Christie <mcrhsit@redhat.com> 6.2.0.872.13
- Update iscsi tools.
* Sat Apr 30 2011 Hans de Goede <hdegoede@redhat.com> - 6.2.0.872-12
- Change iscsi init scripts to check for networking being actually up, rather
then for NetworkManager being started (#692230)

View File

@ -26,6 +26,7 @@ exec=/sbin/iscsid
prog=iscsid
config=/etc/iscsi/iscsid.conf
lockfile=/var/lock/subsys/$prog
iscsi_lockfile=/var/lock/subsys/iscsi
# FIXME this has a false positive for root on nfs
root_is_iscsi() {
@ -33,18 +34,26 @@ root_is_iscsi() {
[[ "$rootopts" =~ "_netdev" ]]
}
force_start() {
start_iscsid() {
echo -n $"Starting $prog: "
modprobe -q iscsi_tcp
modprobe -q ib_iser
modprobe -q cxgb3i
modprobe -q cxgb4i
modprobe -q bnx2i
modprobe -q be2iscsi
daemon iscsiuio
daemon $prog
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
touch $lockfile
}
force_start() {
start_iscsid
# a force start could imply the iscsi service is started due to how it
# lazy starts. We need to touch the lock file so it is shutdown later
touch $iscsi_lockfile
}
use_discoveryd() {
@ -69,7 +78,7 @@ start() {
# or if iscsid is managing the sessions.
grep -qrs "node.startup = automatic" /var/lib/iscsi/nodes
if [ $? -eq 0 ] || root_is_iscsi || use_discoveryd ; then
force_start
start_iscsid
return $?
fi
@ -81,7 +90,7 @@ stop() {
iscsiadm -k 0 2>/dev/null
fi
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|cxgb3i|be2iscsi") )
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|cxgb3i|cxgb4i|be2iscsi") )
if [[ -n "${iparams[*]}" ]]; then
# We have active sessions, so don't stop iscsid!!
echo -n $"Not stopping $prog: iscsi sessions still active"
@ -93,21 +102,25 @@ stop() {
echo -n $"Stopping $prog: "
iscsiadm -k 0 2>/dev/null
echo
killproc iscsiuio
rm -f /var/run/iscsiuio.pid
# only remove the iscsi drivers when offload is used
rmmod bnx2i 2>/dev/null
rmmod cnic 2>/dev/null
rmmod cxgb3i 2>/dev/null
rmmod cxgb4i 2>/dev/null
modprobe -r be2iscsi 2>/dev/null
# a bug in kobject netlink code will cause this to oops
# modprobe -r be2iscsi 2>/dev/null
modprobe -r ib_iser 2>/dev/null
modprobe -r iscsi_tcp 2>/dev/null
success $"Stopping $prog"
rm -f $lockfile
echo
return 0
}
@ -122,7 +135,7 @@ restart() {
stop
# if iscsid was running then make sure it starts up
if [ "$use_force_start" -eq 0 ] ; then
force_start
start_iscsid
else
start
fi

View File

@ -41,46 +41,77 @@ start() {
# if the network isn't up yet exit cleanly, NetworkManager will call us
# again when the network is up
[ ! -f /var/lock/subsys/network ] && ! nm-online -x >/dev/null 2>&1 && exit 0
[ ! -f /var/lock/subsys/network ] && ! nm-online -x >/dev/null 2>&1 && exit 3
# if no nodes are setup to startup automatically exit cleanly
grep -qrs "node.startup = automatic" /var/lib/iscsi/nodes
[ $? -eq 0 ] || exit 0
[ $? -eq 0 ] || exit 3
# this script is normally called from startup so log into
# nodes marked node.startup=automatic
echo -n $"Starting $prog: "
$exec -m node --loginall=automatic 2>&1 > /dev/null | grep iscsiadm
# <sigh> iscsiadm does not always give a non 0 exit status in case of
# error so we grep for any messages to stderr and see those as errors too
if [ ${PIPESTATUS[0]} -ne 0 -o ${PIPESTATUS[1]} -eq 0 ]; then
failure $"Starting $prog"
echo
return 1
fi
# Ignore return code, because this command attempts to log into
# multiple sessions and some sessions could get logged into and
# some could be down temporarily.
success $"Starting $prog"
touch $lockfile
echo
return 0
}
stop() {
echo -n $"Stopping $prog: "
$exec -m node --logoutall=automatic 2>&1 > /dev/null | grep iscsiadm
iscsi_sessions_running() {
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|be2iscsi|cxgb3i|cxgb4i") )
if [[ -z "${iparams[*]}" ]]; then
# no sessions
return 2
fi
# <sigh> iscsiadm does not always give a non 0 exit status in case of
# error so we grep for any messages to stderr and see those as errors too
if [ ${PIPESTATUS[0]} -ne 0 -o ${PIPESTATUS[1]} -eq 0 ]; then
return 0
}
cleanup_successful_stop() {
success $"Stopping $prog"
rm -f $lockfile
echo
}
stop() {
# Don't turn off iscsi if root is possibly on a iscsi disk.
rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
if [[ "$rootopts" =~ "_netdev" ]] ; then
echo $"Can not shutdown iSCSI. Root is on a iSCSI disk."
# Just clean up lock file if this is a system shutdown/reboot.
if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then
rm -f $lockfile
fi
exit 1
fi
echo -n $"Stopping $prog: "
if ! iscsi_sessions_running ; then
cleanup_successful_stop
return 0
fi
if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then
$exec -m node --logoutall=all 2>&1 > /dev/null
else
$exec -m node --logoutall=automatic 2>&1 > /dev/null
fi
ret=$?
# ignore ISCSI_ERR_NO_OBJS_FOUND/21
if [[ "$ret" -ne 0 && "$ret" -ne 21 ]]; then
failure $"Stopping $prog"
echo
return 1
fi
success $"Stopping $prog"
rm -f $lockfile
echo
cleanup_successful_stop
return 0
}
@ -98,14 +129,16 @@ force_reload() {
}
rh_status() {
[ -f $lockfile ] || return 3
[ -f $lockfile ] || { echo $"$prog is stopped" ; return 3 ; }
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|be2iscsi|cxgb3i") )
declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|be2iscsi|cxgb3i|cxgb4i") )
if [[ -z "${iparams[*]}" ]]; then
# no sessions
echo $"No active sessions"
return 2
fi
iscsiadm -m session -P 3
return 0
}
@ -120,7 +153,6 @@ case "$1" in
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)