diff options
author | Adheer Chandravanshi <adheer.chandravanshi@qlogic.com> | 2013-09-17 07:54:50 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-10-25 04:58:02 -0400 |
commit | 97c2730cb8f039705b17ef12b5a5ed9af6eeb460 (patch) | |
tree | 3b7f4212b0128beb1cdcf0fa8bf45f42cb167686 | |
parent | 26ffd7b45fe91f9051a58c31b98eaf530e0895aa (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.c | 41 |
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 | } |