summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO17
-rw-r--r--usr/Makefile2
-rw-r--r--usr/initiator.c6
-rw-r--r--usr/kern_err_table.c83
-rw-r--r--usr/kern_err_table.h23
5 files changed, 111 insertions, 20 deletions
diff --git a/TODO b/TODO
index 06777c4..aea957f 100644
--- a/TODO
+++ b/TODO
@@ -333,23 +333,6 @@ and it would be best to just stop openening a socket per login request.
---------------------------------------------------------------------------
-5. Make iSCSI log messages humanly readable. In many cases the iscsi tools
-will log a error number value. The most well known is conn error 1011.
-Users should not have to search on google for what this means.
-
-We should:
-
-1. Write a simple table to convert the error values to a string and print
-them out.
-
-2. Document the values, how you commonly hit them and common solutions
-in the iSCSI docs.
-
-
-See session_conn_error and __check_iscsi_status_class as a start.
-
----------------------------------------------------------------------------
-
6. Implement broadcast/multicasts support, so the initiator can
find iSNS servers without the user having to set the iSNS server address.
diff --git a/usr/Makefile b/usr/Makefile
index 3ee0cb4..bc7af2c 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -44,7 +44,7 @@ ISCSI_LIB_SRCS = iscsi_util.o io.o auth.o iscsi_timer.o login.o log.o md5.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)
# core initiator files
-INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o
+INITIATOR_SRCS = initiator.o scsi.o actor.o event_poll.o mgmt_ipc.o kern_err_table.o
# fw boot files
FW_BOOT_SRCS = $(wildcard ../utils/fwparam_ibft/*.o)
diff --git a/usr/initiator.c b/usr/initiator.c
index 6c06318..663c3ee 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -47,6 +47,7 @@
#include "iface.h"
#include "sysdeps.h"
#include "iscsi_err.h"
+#include "kern_err_table.h"
#define ISCSI_CONN_ERR_REOPEN_DELAY 3
#define ISCSI_INTERNAL_ERR_REOPEN_DELAY 5
@@ -847,9 +848,10 @@ static void session_conn_error(void *data)
iscsi_conn_t *conn = ev_context->conn;
iscsi_session_t *session = conn->session;
- log_warning("Kernel reported iSCSI connection %d:%d error (%d) "
+ log_warning("Kernel reported iSCSI connection %d:%d error (%d - %s) "
"state (%d)", session->id, conn->id, error,
- conn->state);
+ kern_err_code_to_string(error), conn->state);
+
iscsi_ev_context_put(ev_context);
switch (error) {
diff --git a/usr/kern_err_table.c b/usr/kern_err_table.c
new file mode 100644
index 0000000..a6ea8fb
--- /dev/null
+++ b/usr/kern_err_table.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2011 Aastha Mehta
+ * Copyright (C) 2011 Mike Christie
+ *
+ * maintained by open-iscsi@googlegroups.com
+ *
+ * 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.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "iscsi_if.h"
+
+#include "kern_err_table.h"
+
+const char *kern_err_code_to_string(int err)
+{
+ switch (err){
+ case ISCSI_OK:
+ return "ISCSI_OK: operation successful";
+ case ISCSI_ERR_DATASN:
+ return "ISCSI_ERR_DATASN: Received invalid data sequence "
+ "number from target";
+ case ISCSI_ERR_DATA_OFFSET:
+ return "ISCSI_ERR_DATA_OFFSET: Seeking offset beyond the size "
+ "of the iSCSI segment";
+ case ISCSI_ERR_MAX_CMDSN:
+ return "ISCSI_ERR_MAX_CMDSN: Received invalid command sequence "
+ "number from target";
+ case ISCSI_ERR_EXP_CMDSN:
+ return "ISCSI_ERR_EXP_CMDSN: Received invalid expected command " "sequence number from target";
+ case ISCSI_ERR_BAD_OPCODE:
+ return "ISCSI_ERR_BAD_OPCODE: Received an invalid iSCSI opcode";
+ case ISCSI_ERR_DATALEN:
+ return "ISCSI_ERR_DATALEN: Invalid data length value";
+ case ISCSI_ERR_AHSLEN:
+ return "ISCSI_ERR_AHSLEN: Received an invalid AHS length";
+ case ISCSI_ERR_PROTO:
+ return "ISCSI_ERR_PROTO: iSCSI protocol violation";
+ case ISCSI_ERR_LUN:
+ return "ISCSI_ERR_LUN: LUN mismatch";
+ case ISCSI_ERR_BAD_ITT:
+ return "ISCSI_ERR_BAD_ITT: Received invalid initiator task tag " "from target";
+ case ISCSI_ERR_CONN_FAILED:
+ return "ISCSI_ERR_CONN_FAILED: iSCSI connection failed";
+ case ISCSI_ERR_R2TSN:
+ return "ISCSI_ERR_R2TSN: Received invalid R2T (Ready to "
+ "Transfer) data sequence number from target";
+ case ISCSI_ERR_SESSION_FAILED:
+ return "ISCSI_ERR_SESSION_FAILED: iSCSI session failed";
+ case ISCSI_ERR_HDR_DGST:
+ return "ISCSI_ERR_HDR_DGST: Header digest mismatch";
+ case ISCSI_ERR_DATA_DGST:
+ return "ISCSI_ERR_DATA_DGST: Data digest mismatch";
+ case ISCSI_ERR_PARAM_NOT_FOUND:
+ return "ISCSI_ERR_PARAM_NOT_FOUND: Parameter not found";
+ case ISCSI_ERR_NO_SCSI_CMD:
+ return "ISCSI_ERR_NO_SCSI_CMD: Could not look up SCSI command";
+ case ISCSI_ERR_INVALID_HOST:
+ return "ISCSI_ERR_INVALID_HOST: iSCSI host is in an invalid "
+ "state";
+ case ISCSI_ERR_XMIT_FAILED:
+ return "ISCSI_ERR_XMIT_FAILED: Transmission of iSCSI packet "
+ "failed";
+ case ISCSI_ERR_TCP_CONN_CLOSE:
+ return "ISCSI_ERR_TCP_CONN_CLOSE: TCP connection closed";
+ case ISCSI_ERR_SCSI_EH_SESSION_RST:
+ return "ISCSI_ERR_SCSI_EH_SESSION_RST: Session was dropped as "
+ "a result of SCSI error recovery";
+ default:
+ return "Invalid or unknown error code";
+ }
+}
diff --git a/usr/kern_err_table.h b/usr/kern_err_table.h
new file mode 100644
index 0000000..592e40d
--- /dev/null
+++ b/usr/kern_err_table.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2011 Aastha Mehta
+ * Copyright (C) 2011 Mike Christie
+ *
+ * maintained by open-iscsi@googlegroups.com
+ *
+ * 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 __KERN_ERR_TABLE_H__
+#define __KERN_ERR_TABLE_H__
+
+extern const char *kern_err_code_to_string(int);
+#endif