int buflen = 0;
        struct iscsi_session *sess;
        struct ddb_entry *ddb_entry;
+       struct ql4_chap_table chap_tbl;
        struct iscsi_conn *conn;
        char ip_addr[DDB_IPADDR_LEN];
        uint16_t options = 0;
        sess = cls_sess->dd_data;
        ddb_entry = sess->dd_data;
        conn = cls_conn->dd_data;
+       memset(&chap_tbl, 0, sizeof(chap_tbl));
 
        ddb_entry->chap_tbl_idx = le16_to_cpu(fw_ddb_entry->chap_tbl_idx);
 
                        (char *)fw_ddb_entry->iscsi_name, buflen);
        iscsi_set_param(cls_conn, ISCSI_PARAM_INITIATOR_NAME,
                        (char *)ha->name_string, buflen);
+
+       if (ddb_entry->chap_tbl_idx != INVALID_ENTRY) {
+               if (!qla4xxx_get_uni_chap_at_index(ha, chap_tbl.name,
+                                                  chap_tbl.secret,
+                                                  ddb_entry->chap_tbl_idx)) {
+                       iscsi_set_param(cls_conn, ISCSI_PARAM_USERNAME,
+                                       (char *)chap_tbl.name,
+                                       strlen((char *)chap_tbl.name));
+                       iscsi_set_param(cls_conn, ISCSI_PARAM_PASSWORD,
+                                       (char *)chap_tbl.secret,
+                                       chap_tbl.secret_len);
+               }
+       }
 }
 
 void qla4xxx_update_session_conn_fwddb_param(struct scsi_qla_host *ha,
        ddb_entry->ha = ha;
        ddb_entry->unblock_sess = qla4xxx_unblock_flash_ddb;
        ddb_entry->ddb_change = qla4xxx_flash_ddb_change;
+       ddb_entry->chap_tbl_idx = INVALID_ENTRY;
 
        atomic_set(&ddb_entry->retry_relogin_timer, INVALID_ENTRY);
        atomic_set(&ddb_entry->relogin_timer, 0);