aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdheer Chandravanshi <adheer.chandravanshi@qlogic.com>2013-09-17 07:54:50 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-10-25 04:58:02 -0400
commit97c2730cb8f039705b17ef12b5a5ed9af6eeb460 (patch)
tree3b7f4212b0128beb1cdcf0fa8bf45f42cb167686
parent26ffd7b45fe91f9051a58c31b98eaf530e0895aa (diff)
[SCSI] qla4xxx: Add support to get CHAP details for flash target session
Add support to get local CHAP - index, username and password, sysfs params of iscsi session corresponding to flash target entry. Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r--drivers/scsi/qla4xxx/ql4_os.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 933c7668531b..6dc3e99b7f9c 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -1652,9 +1652,12 @@ static int qla4xxx_session_get_param(struct iscsi_cls_session *cls_sess,
1652 struct iscsi_session *sess = cls_sess->dd_data; 1652 struct iscsi_session *sess = cls_sess->dd_data;
1653 struct ddb_entry *ddb_entry = sess->dd_data; 1653 struct ddb_entry *ddb_entry = sess->dd_data;
1654 struct scsi_qla_host *ha = ddb_entry->ha; 1654 struct scsi_qla_host *ha = ddb_entry->ha;
1655 struct iscsi_cls_conn *cls_conn = ddb_entry->conn;
1656 struct ql4_chap_table chap_tbl;
1655 int rval, len; 1657 int rval, len;
1656 uint16_t idx; 1658 uint16_t idx;
1657 1659
1660 memset(&chap_tbl, 0, sizeof(chap_tbl));
1658 switch (param) { 1661 switch (param) {
1659 case ISCSI_PARAM_CHAP_IN_IDX: 1662 case ISCSI_PARAM_CHAP_IN_IDX:
1660 rval = qla4xxx_get_chap_index(ha, sess->username_in, 1663 rval = qla4xxx_get_chap_index(ha, sess->username_in,
@@ -1666,14 +1669,46 @@ static int qla4xxx_session_get_param(struct iscsi_cls_session *cls_sess,
1666 len = sprintf(buf, "%hu\n", idx); 1669 len = sprintf(buf, "%hu\n", idx);
1667 break; 1670 break;
1668 case ISCSI_PARAM_CHAP_OUT_IDX: 1671 case ISCSI_PARAM_CHAP_OUT_IDX:
1669 rval = qla4xxx_get_chap_index(ha, sess->username, 1672 if (ddb_entry->ddb_type == FLASH_DDB) {
1670 sess->password, LOCAL_CHAP, 1673 if (ddb_entry->chap_tbl_idx != INVALID_ENTRY) {
1671 &idx); 1674 idx = ddb_entry->chap_tbl_idx;
1675 rval = QLA_SUCCESS;
1676 } else {
1677 rval = QLA_ERROR;
1678 }
1679 } else {
1680 rval = qla4xxx_get_chap_index(ha, sess->username,
1681 sess->password,
1682 LOCAL_CHAP, &idx);
1683 }
1672 if (rval) 1684 if (rval)
1673 len = sprintf(buf, "\n"); 1685 len = sprintf(buf, "\n");
1674 else 1686 else
1675 len = sprintf(buf, "%hu\n", idx); 1687 len = sprintf(buf, "%hu\n", idx);
1676 break; 1688 break;
1689 case ISCSI_PARAM_USERNAME:
1690 case ISCSI_PARAM_PASSWORD:
1691 /* First, populate session username and password for FLASH DDB,
1692 * if not already done. This happens when session login fails
1693 * for a FLASH DDB.
1694 */
1695 if (ddb_entry->ddb_type == FLASH_DDB &&
1696 ddb_entry->chap_tbl_idx != INVALID_ENTRY &&
1697 !sess->username && !sess->password) {
1698 idx = ddb_entry->chap_tbl_idx;
1699 rval = qla4xxx_get_uni_chap_at_index(ha, chap_tbl.name,
1700 chap_tbl.secret,
1701 idx);
1702 if (!rval) {
1703 iscsi_set_param(cls_conn, ISCSI_PARAM_USERNAME,
1704 (char *)chap_tbl.name,
1705 strlen((char *)chap_tbl.name));
1706 iscsi_set_param(cls_conn, ISCSI_PARAM_PASSWORD,
1707 (char *)chap_tbl.secret,
1708 chap_tbl.secret_len);
1709 }
1710 }
1711 /* allow fall-through */
1677 default: 1712 default:
1678 return iscsi_session_get_param(cls_sess, param, buf); 1713 return iscsi_session_get_param(cls_sess, param, buf);
1679 } 1714 }