Commit b2c64167 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] iscsi class, iscsi_tcp, ib_iser: add sysfs chap file

The attached patches add sysfs files for the chap settings
to the iscsi transport class, iscsi_tcp and ib_iser. This is
needed for software iscsi because there are times when iscsid
can die and it will need to reread the values it was using.
And it is needed by qla4xxx for basic management opertaions.
This patch does not hook in qla4xxx yet, because I am not sure
the mbx command to use.
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Cc: Roland Dreier <rdreier@cisco.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 857ae0bd
...@@ -574,8 +574,9 @@ static struct iscsi_transport iscsi_iser_transport = { ...@@ -574,8 +574,9 @@ static struct iscsi_transport iscsi_iser_transport = {
ISCSI_EXP_STATSN | ISCSI_EXP_STATSN |
ISCSI_PERSISTENT_PORT | ISCSI_PERSISTENT_PORT |
ISCSI_PERSISTENT_ADDRESS | ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME | ISCSI_TARGET_NAME | ISCSI_TPGT |
ISCSI_TPGT, ISCSI_USERNAME | ISCSI_PASSWORD |
ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN,
.host_param_mask = ISCSI_HOST_HWADDRESS | .host_param_mask = ISCSI_HOST_HWADDRESS |
ISCSI_HOST_INITIATOR_NAME, ISCSI_HOST_INITIATOR_NAME,
.host_template = &iscsi_iser_sht, .host_template = &iscsi_iser_sht,
......
...@@ -2186,8 +2186,9 @@ static struct iscsi_transport iscsi_tcp_transport = { ...@@ -2186,8 +2186,9 @@ static struct iscsi_transport iscsi_tcp_transport = {
ISCSI_EXP_STATSN | ISCSI_EXP_STATSN |
ISCSI_PERSISTENT_PORT | ISCSI_PERSISTENT_PORT |
ISCSI_PERSISTENT_ADDRESS | ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME | ISCSI_TARGET_NAME | ISCSI_TPGT |
ISCSI_TPGT, ISCSI_USERNAME | ISCSI_PASSWORD |
ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN,
.host_param_mask = ISCSI_HOST_HWADDRESS | .host_param_mask = ISCSI_HOST_HWADDRESS |
ISCSI_HOST_INITIATOR_NAME, ISCSI_HOST_INITIATOR_NAME,
.host_template = &iscsi_sht, .host_template = &iscsi_sht,
......
...@@ -1461,6 +1461,10 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session) ...@@ -1461,6 +1461,10 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds); iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
iscsi_pool_free(&session->cmdpool, (void**)session->cmds); iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
kfree(session->password);
kfree(session->password_in);
kfree(session->username);
kfree(session->username_in);
kfree(session->targetname); kfree(session->targetname);
kfree(session->hwaddress); kfree(session->hwaddress);
kfree(session->initiatorname); kfree(session->initiatorname);
...@@ -1869,6 +1873,30 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn, ...@@ -1869,6 +1873,30 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
case ISCSI_PARAM_EXP_STATSN: case ISCSI_PARAM_EXP_STATSN:
sscanf(buf, "%u", &conn->exp_statsn); sscanf(buf, "%u", &conn->exp_statsn);
break; break;
case ISCSI_PARAM_USERNAME:
kfree(session->username);
session->username = kstrdup(buf, GFP_KERNEL);
if (!session->username)
return -ENOMEM;
break;
case ISCSI_PARAM_USERNAME_IN:
kfree(session->username_in);
session->username_in = kstrdup(buf, GFP_KERNEL);
if (!session->username_in)
return -ENOMEM;
break;
case ISCSI_PARAM_PASSWORD:
kfree(session->password);
session->password = kstrdup(buf, GFP_KERNEL);
if (!session->password)
return -ENOMEM;
break;
case ISCSI_PARAM_PASSWORD_IN:
kfree(session->password_in);
session->password_in = kstrdup(buf, GFP_KERNEL);
if (!session->password_in)
return -ENOMEM;
break;
case ISCSI_PARAM_TARGET_NAME: case ISCSI_PARAM_TARGET_NAME:
/* this should not change between logins */ /* this should not change between logins */
if (session->targetname) if (session->targetname)
...@@ -1942,6 +1970,18 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session, ...@@ -1942,6 +1970,18 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session,
case ISCSI_PARAM_TPGT: case ISCSI_PARAM_TPGT:
len = sprintf(buf, "%d\n", session->tpgt); len = sprintf(buf, "%d\n", session->tpgt);
break; break;
case ISCSI_PARAM_USERNAME:
len = sprintf(buf, "%s\n", session->username);
break;
case ISCSI_PARAM_USERNAME_IN:
len = sprintf(buf, "%s\n", session->username_in);
break;
case ISCSI_PARAM_PASSWORD:
len = sprintf(buf, "%s\n", session->password);
break;
case ISCSI_PARAM_PASSWORD_IN:
len = sprintf(buf, "%s\n", session->password_in);
break;
default: default:
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <scsi/scsi_transport_iscsi.h> #include <scsi/scsi_transport_iscsi.h>
#include <scsi/iscsi_if.h> #include <scsi/iscsi_if.h>
#define ISCSI_SESSION_ATTRS 11 #define ISCSI_SESSION_ATTRS 15
#define ISCSI_CONN_ATTRS 11 #define ISCSI_CONN_ATTRS 11
#define ISCSI_HOST_ATTRS 2 #define ISCSI_HOST_ATTRS 2
#define ISCSI_TRANSPORT_VERSION "2.0-724" #define ISCSI_TRANSPORT_VERSION "2.0-724"
...@@ -1196,30 +1196,37 @@ iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS); ...@@ -1196,30 +1196,37 @@ iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS);
/* /*
* iSCSI session attrs * iSCSI session attrs
*/ */
#define iscsi_session_attr_show(param) \ #define iscsi_session_attr_show(param, perm) \
static ssize_t \ static ssize_t \
show_session_param_##param(struct class_device *cdev, char *buf) \ show_session_param_##param(struct class_device *cdev, char *buf) \
{ \ { \
struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \
struct iscsi_transport *t = session->transport; \ struct iscsi_transport *t = session->transport; \
\
if (perm && !capable(CAP_SYS_ADMIN)) \
return -EACCES; \
return t->get_session_param(session, param, buf); \ return t->get_session_param(session, param, buf); \
} }
#define iscsi_session_attr(field, param) \ #define iscsi_session_attr(field, param, perm) \
iscsi_session_attr_show(param) \ iscsi_session_attr_show(param, perm) \
static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_param_##param, \ static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_param_##param, \
NULL); NULL);
iscsi_session_attr(targetname, ISCSI_PARAM_TARGET_NAME); iscsi_session_attr(targetname, ISCSI_PARAM_TARGET_NAME, 0);
iscsi_session_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN); iscsi_session_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN, 0);
iscsi_session_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T); iscsi_session_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T, 0);
iscsi_session_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN); iscsi_session_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN, 0);
iscsi_session_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST); iscsi_session_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST, 0);
iscsi_session_attr(max_burst_len, ISCSI_PARAM_MAX_BURST); iscsi_session_attr(max_burst_len, ISCSI_PARAM_MAX_BURST, 0);
iscsi_session_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN); iscsi_session_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN, 0);
iscsi_session_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN); iscsi_session_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN, 0);
iscsi_session_attr(erl, ISCSI_PARAM_ERL); iscsi_session_attr(erl, ISCSI_PARAM_ERL, 0);
iscsi_session_attr(tpgt, ISCSI_PARAM_TPGT); iscsi_session_attr(tpgt, ISCSI_PARAM_TPGT, 0);
iscsi_session_attr(username, ISCSI_PARAM_USERNAME, 1);
iscsi_session_attr(username_in, ISCSI_PARAM_USERNAME_IN, 1);
iscsi_session_attr(password, ISCSI_PARAM_PASSWORD, 1);
iscsi_session_attr(password_in, ISCSI_PARAM_PASSWORD_IN, 1);
#define iscsi_priv_session_attr_show(field, format) \ #define iscsi_priv_session_attr_show(field, format) \
static ssize_t \ static ssize_t \
...@@ -1433,6 +1440,10 @@ iscsi_register_transport(struct iscsi_transport *tt) ...@@ -1433,6 +1440,10 @@ iscsi_register_transport(struct iscsi_transport *tt)
SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL); SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL);
SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME); SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME);
SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT); SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT);
SETUP_SESSION_RD_ATTR(password, ISCSI_USERNAME);
SETUP_SESSION_RD_ATTR(password_in, ISCSI_USERNAME_IN);
SETUP_SESSION_RD_ATTR(username, ISCSI_PASSWORD);
SETUP_SESSION_RD_ATTR(username_in, ISCSI_PASSWORD_IN);
SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo); SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo);
BUG_ON(count > ISCSI_SESSION_ATTRS); BUG_ON(count > ISCSI_SESSION_ATTRS);
......
...@@ -229,6 +229,11 @@ enum iscsi_param { ...@@ -229,6 +229,11 @@ enum iscsi_param {
ISCSI_PARAM_CONN_PORT, ISCSI_PARAM_CONN_PORT,
ISCSI_PARAM_CONN_ADDRESS, ISCSI_PARAM_CONN_ADDRESS,
ISCSI_PARAM_USERNAME,
ISCSI_PARAM_USERNAME_IN,
ISCSI_PARAM_PASSWORD,
ISCSI_PARAM_PASSWORD_IN,
/* must always be last */ /* must always be last */
ISCSI_PARAM_MAX, ISCSI_PARAM_MAX,
}; };
...@@ -255,6 +260,10 @@ enum iscsi_param { ...@@ -255,6 +260,10 @@ enum iscsi_param {
#define ISCSI_SESS_RECOVERY_TMO (1 << ISCSI_PARAM_SESS_RECOVERY_TMO) #define ISCSI_SESS_RECOVERY_TMO (1 << ISCSI_PARAM_SESS_RECOVERY_TMO)
#define ISCSI_CONN_PORT (1 << ISCSI_PARAM_CONN_PORT) #define ISCSI_CONN_PORT (1 << ISCSI_PARAM_CONN_PORT)
#define ISCSI_CONN_ADDRESS (1 << ISCSI_PARAM_CONN_ADDRESS) #define ISCSI_CONN_ADDRESS (1 << ISCSI_PARAM_CONN_ADDRESS)
#define ISCSI_USERNAME (1 << ISCSI_PARAM_USERNAME)
#define ISCSI_USERNAME_IN (1 << ISCSI_PARAM_USERNAME_IN)
#define ISCSI_PASSWORD (1 << ISCSI_PARAM_PASSWORD)
#define ISCSI_PASSWORD_IN (1 << ISCSI_PARAM_PASSWORD_IN)
/* iSCSI HBA params */ /* iSCSI HBA params */
enum iscsi_host_param { enum iscsi_host_param {
......
...@@ -221,6 +221,10 @@ struct iscsi_session { ...@@ -221,6 +221,10 @@ struct iscsi_session {
int dataseq_inorder_en; int dataseq_inorder_en;
int erl; int erl;
int tpgt; int tpgt;
char *username;
char *username_in;
char *password;
char *password_in;
char *targetname; char *targetname;
char *initiatorname; char *initiatorname;
/* hw address being used for iscsi connection */ /* hw address being used for iscsi connection */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment