diff options
-rw-r--r-- | TODO | 17 | ||||
-rw-r--r-- | usr/Makefile | 2 | ||||
-rw-r--r-- | usr/initiator.c | 6 | ||||
-rw-r--r-- | usr/kern_err_table.c | 83 | ||||
-rw-r--r-- | usr/kern_err_table.h | 23 |
5 files changed, 111 insertions, 20 deletions
@@ -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 |