|
Packit Service |
646995 |
#include <stdlib.h>
|
|
Packit Service |
646995 |
#include <stdio.h>
|
|
Packit Service |
646995 |
#include <errno.h>
|
|
Packit Service |
646995 |
#include <stdint.h>
|
|
Packit Service |
646995 |
#include <inttypes.h>
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
#include <libopeniscsiusr/libopeniscsiusr.h>
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
#include "list.h"
|
|
Packit Service |
646995 |
#include "log.h"
|
|
Packit Service |
646995 |
#include "iscsi_sysfs.h"
|
|
Packit Service |
646995 |
#include "version.h"
|
|
Packit Service |
646995 |
#include "iscsi_settings.h"
|
|
Packit Service |
646995 |
#include "mgmt_ipc.h"
|
|
Packit Service |
646995 |
#include "session_info.h"
|
|
Packit Service |
646995 |
#include "transport.h"
|
|
Packit Service |
646995 |
#include "initiator.h"
|
|
Packit Service |
646995 |
#include "iface.h"
|
|
Packit Service |
646995 |
#include "iscsid_req.h"
|
|
Packit Service |
646995 |
#include "iscsi_err.h"
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static int session_info_print_flat(struct iscsi_session *se);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
int session_info_create_list(void *data, struct session_info *info)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
struct session_link_info *link_info = data;
|
|
Packit Service |
646995 |
struct list_head *list = link_info->list;
|
|
Packit Service |
646995 |
struct session_info *new, *curr, *match = NULL;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (link_info->match_fn && !link_info->match_fn(link_info->data, info))
|
|
Packit Service |
646995 |
return -1;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
new = calloc(1, sizeof(*new));
|
|
Packit Service |
646995 |
if (!new)
|
|
Packit Service |
646995 |
return ISCSI_ERR_NOMEM;
|
|
Packit Service |
646995 |
memcpy(new, info, sizeof(*new));
|
|
Packit Service |
646995 |
INIT_LIST_HEAD(&new->list);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (list_empty(list)) {
|
|
Packit Service |
646995 |
list_add_tail(&new->list, list);
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
list_for_each_entry(curr, list, list) {
|
|
Packit Service |
646995 |
if (!strcmp(curr->targetname, info->targetname)) {
|
|
Packit Service |
646995 |
match = curr;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (!strcmp(curr->address, info->address)) {
|
|
Packit Service |
646995 |
match = curr;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (curr->port == info->port) {
|
|
Packit Service |
646995 |
match = curr;
|
|
Packit Service |
646995 |
break;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
list_add_tail(&new->list, match ? match->list.next : list);
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
void session_info_free_list(struct list_head *list)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
struct session_info *curr, *tmp;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
list_for_each_entry_safe(curr, tmp, list, list) {
|
|
Packit Service |
646995 |
list_del(&curr->list);
|
|
Packit Service |
646995 |
free(curr);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static char *get_iscsi_node_type(uint32_t sid)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
int pid = iscsi_sysfs_session_user_created((int) sid);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (!pid)
|
|
Packit Service |
646995 |
return "flash";
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
return "non-flash";
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static int session_info_print_flat(struct iscsi_session *se)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
uint32_t sid = 0;
|
|
Packit Service |
646995 |
struct iscsi_transport *t = NULL;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
sid = iscsi_session_sid_get(se);
|
|
Packit Service |
646995 |
t = iscsi_sysfs_get_transport_by_sid((int) sid);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (strchr(iscsi_session_persistent_address_get(se), '.'))
|
|
Packit Service |
646995 |
printf("%s: [%" PRIu32 "] %s:%" PRIi32 ",%"PRIi32 " %s (%s)\n",
|
|
Packit Service |
646995 |
t ? t->name : UNKNOWN_VALUE,
|
|
Packit Service |
646995 |
sid, iscsi_session_persistent_address_get(se),
|
|
Packit Service |
646995 |
iscsi_session_persistent_port_get(se),
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(se),
|
|
Packit Service |
646995 |
iscsi_session_target_name_get(se),
|
|
Packit Service |
646995 |
get_iscsi_node_type(sid));
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s: [%" PRIu32 "] [%s]:%" PRIi32 ",%" PRIi32
|
|
Packit Service |
646995 |
" %s (%s)\n",
|
|
Packit Service |
646995 |
t ? t->name : UNKNOWN_VALUE,
|
|
Packit Service |
646995 |
sid, iscsi_session_persistent_address_get(se),
|
|
Packit Service |
646995 |
iscsi_session_persistent_port_get(se),
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(se),
|
|
Packit Service |
646995 |
iscsi_session_target_name_get(se),
|
|
Packit Service |
646995 |
get_iscsi_node_type(sid));
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static int print_iscsi_state(int sid, char *prefix, int tmo)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
iscsiadm_req_t req;
|
|
Packit Service |
646995 |
iscsiadm_rsp_t rsp;
|
|
Packit Service |
646995 |
int err;
|
|
Packit Service |
646995 |
char *state = NULL;
|
|
Packit Service |
646995 |
char state_buff[SCSI_MAX_STATE_VALUE];
|
|
Packit Service |
646995 |
static char *conn_state[] = {
|
|
Packit Service |
646995 |
"FREE",
|
|
Packit Service |
646995 |
"TRANSPORT WAIT",
|
|
Packit Service |
646995 |
"IN LOGIN",
|
|
Packit Service |
646995 |
"LOGGED IN",
|
|
Packit Service |
646995 |
"IN LOGOUT",
|
|
Packit Service |
646995 |
"LOGOUT REQUESTED",
|
|
Packit Service |
646995 |
"CLEANUP WAIT",
|
|
Packit Service |
646995 |
};
|
|
Packit Service |
646995 |
static char *session_state[] = {
|
|
Packit Service |
646995 |
"NO CHANGE",
|
|
Packit Service |
646995 |
"CLEANUP",
|
|
Packit Service |
646995 |
"REOPEN",
|
|
Packit Service |
646995 |
"REDIRECT",
|
|
Packit Service |
646995 |
};
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
memset(&req, 0, sizeof(iscsiadm_req_t));
|
|
Packit Service |
646995 |
req.command = MGMT_IPC_SESSION_INFO;
|
|
Packit Service |
646995 |
req.u.session.sid = sid;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
err = iscsid_exec_req(&req, &rsp, 1, tmo);
|
|
Packit Service |
646995 |
/*
|
|
Packit Service |
646995 |
* for drivers like qla4xxx, iscsid does not display
|
|
Packit Service |
646995 |
* anything here since it does not know about it.
|
|
Packit Service |
646995 |
*/
|
|
Packit Service |
646995 |
if (!err && rsp.u.session_state.conn_state >= 0 &&
|
|
Packit Service |
646995 |
rsp.u.session_state.conn_state <= ISCSI_CONN_STATE_CLEANUP_WAIT)
|
|
Packit Service |
646995 |
state = conn_state[rsp.u.session_state.conn_state];
|
|
Packit Service |
646995 |
printf("%s\t\tiSCSI Connection State: %s\n", prefix,
|
|
Packit Service |
646995 |
state ? state : "Unknown");
|
|
Packit Service |
646995 |
state = NULL;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
memset(state_buff, 0, SCSI_MAX_STATE_VALUE);
|
|
Packit Service |
646995 |
if (!iscsi_sysfs_get_session_state(state_buff, sid))
|
|
Packit Service |
646995 |
printf("%s\t\tiSCSI Session State: %s\n", prefix, state_buff);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\t\tiSCSI Session State: Unknown\n", prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (!err && rsp.u.session_state.session_state >= 0 &&
|
|
Packit Service |
646995 |
rsp.u.session_state.session_state <= R_STAGE_SESSION_REDIRECT)
|
|
Packit Service |
646995 |
state = session_state[rsp.u.session_state.session_state];
|
|
Packit Service |
646995 |
printf("%s\t\tInternal iscsid Session State: %s\n", prefix,
|
|
Packit Service |
646995 |
state ? state : "Unknown");
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static void print_iscsi_params(int sid, char *prefix)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
struct iscsi_session_operational_config session_conf;
|
|
Packit Service |
646995 |
struct iscsi_conn_operational_config conn_conf;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
iscsi_sysfs_get_negotiated_session_conf(sid, &session_conf);
|
|
Packit Service |
646995 |
iscsi_sysfs_get_negotiated_conn_conf(sid, &conn_conf);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
printf("%s\t\t************************\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tNegotiated iSCSI params:\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\t************************\n", prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (is_valid_operational_value(conn_conf.HeaderDigest))
|
|
Packit Service |
646995 |
printf("%s\t\tHeaderDigest: %s\n", prefix,
|
|
Packit Service |
646995 |
conn_conf.HeaderDigest ? "CRC32C" : "None");
|
|
Packit Service |
646995 |
if (is_valid_operational_value(conn_conf.DataDigest))
|
|
Packit Service |
646995 |
printf("%s\t\tDataDigest: %s\n", prefix,
|
|
Packit Service |
646995 |
conn_conf.DataDigest ? "CRC32C" : "None");
|
|
Packit Service |
646995 |
if (is_valid_operational_value(conn_conf.MaxRecvDataSegmentLength))
|
|
Packit Service |
646995 |
printf("%s\t\tMaxRecvDataSegmentLength: %d\n", prefix,
|
|
Packit Service |
646995 |
conn_conf.MaxRecvDataSegmentLength);
|
|
Packit Service |
646995 |
if (is_valid_operational_value(conn_conf.MaxXmitDataSegmentLength))
|
|
Packit Service |
646995 |
printf("%s\t\tMaxXmitDataSegmentLength: %d\n", prefix,
|
|
Packit Service |
646995 |
conn_conf.MaxXmitDataSegmentLength);
|
|
Packit Service |
646995 |
if (is_valid_operational_value(session_conf.FirstBurstLength))
|
|
Packit Service |
646995 |
printf("%s\t\tFirstBurstLength: %d\n", prefix,
|
|
Packit Service |
646995 |
session_conf.FirstBurstLength);
|
|
Packit Service |
646995 |
if (is_valid_operational_value(session_conf.MaxBurstLength))
|
|
Packit Service |
646995 |
printf("%s\t\tMaxBurstLength: %d\n", prefix,
|
|
Packit Service |
646995 |
session_conf.MaxBurstLength);
|
|
Packit Service |
646995 |
if (is_valid_operational_value(session_conf.ImmediateData))
|
|
Packit Service |
646995 |
printf("%s\t\tImmediateData: %s\n", prefix,
|
|
Packit Service |
646995 |
session_conf.ImmediateData ? "Yes" : "No");
|
|
Packit Service |
646995 |
if (is_valid_operational_value(session_conf.InitialR2T))
|
|
Packit Service |
646995 |
printf("%s\t\tInitialR2T: %s\n", prefix,
|
|
Packit Service |
646995 |
session_conf.InitialR2T ? "Yes" : "No");
|
|
Packit Service |
646995 |
if (is_valid_operational_value(session_conf.MaxOutstandingR2T))
|
|
Packit Service |
646995 |
printf("%s\t\tMaxOutstandingR2T: %d\n", prefix,
|
|
Packit Service |
646995 |
session_conf.MaxOutstandingR2T);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static void print_scsi_device_info(void *data, int host_no, int target, int lun)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
char *prefix = data;
|
|
Packit Service |
646995 |
char *blockdev, state[SCSI_MAX_STATE_VALUE];
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
printf("%s\t\tscsi%d Channel 00 Id %d Lun: %d\n", prefix, host_no,
|
|
Packit Service |
646995 |
target, lun);
|
|
Packit Service |
646995 |
blockdev = iscsi_sysfs_get_blockdev_from_lun(host_no, target, lun);
|
|
Packit Service |
646995 |
if (blockdev) {
|
|
Packit Service |
646995 |
printf("%s\t\t\tAttached scsi disk %s\t\t", prefix, blockdev);
|
|
Packit Service |
646995 |
free(blockdev);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (!iscsi_sysfs_get_device_state(state, host_no, target, lun))
|
|
Packit Service |
646995 |
printf("State: %s\n", state);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("State: Unknown\n");
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
static int print_scsi_state(int sid, char *prefix, unsigned int flags)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
int host_no = -1, err = 0;
|
|
Packit Service |
646995 |
char state[SCSI_MAX_STATE_VALUE];
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
printf("%s\t\t************************\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tAttached SCSI devices:\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\t************************\n", prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
host_no = iscsi_sysfs_get_host_no_from_sid(sid, &err;;
|
|
Packit Service |
646995 |
if (err) {
|
|
Packit Service |
646995 |
printf("%s\t\tUnavailable\n", prefix);
|
|
Packit Service |
646995 |
return err;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_HOST_DEVS) {
|
|
Packit Service |
646995 |
printf("%s\t\tHost Number: %d\t", prefix, host_no);
|
|
Packit Service |
646995 |
if (!iscsi_sysfs_get_host_state(state, host_no))
|
|
Packit Service |
646995 |
printf("State: %s\n", state);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("State: Unknown\n");
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_SCSI_DEVS)
|
|
Packit Service |
646995 |
iscsi_sysfs_for_each_device(prefix, host_no, sid,
|
|
Packit Service |
646995 |
print_scsi_device_info);
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
void session_info_print_tree(struct iscsi_session **ses, uint32_t se_count,
|
|
Packit Service |
646995 |
char *prefix, unsigned int flags, int do_show)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
struct iscsi_session *curr = NULL;
|
|
Packit Service |
646995 |
struct iscsi_session *prev = NULL;
|
|
Packit Service |
646995 |
const char *curr_targetname = NULL;
|
|
Packit Service |
646995 |
const char *curr_address = NULL;
|
|
Packit Service |
646995 |
const char *persistent_address = NULL;
|
|
Packit Service |
646995 |
const char *prev_targetname = NULL;
|
|
Packit Service |
646995 |
const char *prev_address = NULL;
|
|
Packit Service |
646995 |
int32_t curr_port = 0;
|
|
Packit Service |
646995 |
int32_t prev_port = 0;
|
|
Packit Service |
646995 |
uint32_t i = 0;
|
|
Packit Service |
646995 |
uint32_t sid = 0;
|
|
Packit Service |
646995 |
char *new_prefix = NULL;
|
|
Packit Service |
646995 |
int32_t tgt_reset_tmo = -1;
|
|
Packit Service |
646995 |
int32_t lu_reset_tmo = -1;
|
|
Packit Service |
646995 |
int32_t abort_tmo = -1;
|
|
Packit Service |
646995 |
const char *pass = NULL;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
for (i = 0; i < se_count; ++i) {
|
|
Packit Service |
646995 |
curr = ses[i];
|
|
Packit Service |
646995 |
curr_targetname = iscsi_session_target_name_get(curr);
|
|
Packit Service |
646995 |
sid = iscsi_session_sid_get(curr);
|
|
Packit Service |
646995 |
if (prev != NULL)
|
|
Packit Service |
646995 |
prev_targetname = iscsi_session_target_name_get(prev);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
prev_targetname = NULL;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (! ((prev_targetname != NULL) &&
|
|
Packit Service |
646995 |
(curr_targetname != NULL) &&
|
|
Packit Service |
646995 |
(strcmp(prev_targetname, curr_targetname) == 0))) {
|
|
Packit Service |
646995 |
printf("%sTarget: %s (%s)\n", prefix, curr_targetname,
|
|
Packit Service |
646995 |
get_iscsi_node_type(sid));
|
|
Packit Service |
646995 |
prev = NULL;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
curr_address = iscsi_session_address_get(curr);
|
|
Packit Service |
646995 |
curr_port = iscsi_session_port_get(curr);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (prev != NULL) {
|
|
Packit Service |
646995 |
prev_address = iscsi_session_address_get(prev);
|
|
Packit Service |
646995 |
prev_port = iscsi_session_port_get(prev);
|
|
Packit Service |
646995 |
} else {
|
|
Packit Service |
646995 |
prev_address = NULL;
|
|
Packit Service |
646995 |
prev_port = 0;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
if (! ((prev_address != NULL) &&
|
|
Packit Service |
646995 |
(curr_address != NULL) &&
|
|
Packit Service |
646995 |
(prev_port != 0) &&
|
|
Packit Service |
646995 |
(curr_port != 0) &&
|
|
Packit Service |
646995 |
(strcmp(prev_address, curr_address) == 0) &&
|
|
Packit Service |
646995 |
(curr_port == prev_port))) {
|
|
Packit Service |
646995 |
if (strchr(curr_address, '.'))
|
|
Packit Service |
646995 |
printf("%s\tCurrent Portal: %s:%" PRIi32
|
|
Packit Service |
646995 |
",%" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, curr_address, curr_port,
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(curr));
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\tCurrent Portal: [%s]:%" PRIi32
|
|
Packit Service |
646995 |
",%" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, curr_address, curr_port,
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(curr));
|
|
Packit Service |
646995 |
persistent_address =
|
|
Packit Service |
646995 |
iscsi_session_persistent_address_get(curr);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (strchr(persistent_address, '.'))
|
|
Packit Service |
646995 |
printf("%s\tPersistent Portal: %s:%" PRIi32
|
|
Packit Service |
646995 |
",%" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, persistent_address,
|
|
Packit Service |
646995 |
iscsi_session_persistent_port_get(curr),
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(curr));
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\tPersistent Portal: [%s]:%" PRIi32
|
|
Packit Service |
646995 |
",%" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, persistent_address,
|
|
Packit Service |
646995 |
iscsi_session_persistent_port_get(curr),
|
|
Packit Service |
646995 |
iscsi_session_tpgt_get(curr));
|
|
Packit Service |
646995 |
} else
|
|
Packit Service |
646995 |
printf("\n");
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_IFACE) {
|
|
Packit Service |
646995 |
printf("%s\t\t**********\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tInterface:\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\t**********\n", prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
new_prefix = calloc(1, 1 + strlen(prefix) +
|
|
Packit Service |
646995 |
strlen("\t\t"));
|
|
Packit Service |
646995 |
if (new_prefix == NULL) {
|
|
Packit Service |
646995 |
printf("Could not print interface info. "
|
|
Packit Service |
646995 |
"Out of Memory.\n");
|
|
Packit Service |
646995 |
return;
|
|
Packit Service |
646995 |
} else {
|
|
Packit Service |
646995 |
sprintf(new_prefix, "%s%s", prefix, "\t\t");
|
|
Packit Service |
646995 |
iface_print(iscsi_session_iface_get(curr),
|
|
Packit Service |
646995 |
new_prefix);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
free(new_prefix);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_ISCSI_STATE) {
|
|
Packit Service |
646995 |
printf("%s\t\tSID: %" PRIu32 "\n", prefix, sid);
|
|
Packit Service |
646995 |
print_iscsi_state((int) sid, prefix, -1 /* tmo */);
|
|
Packit Service |
646995 |
/* TODO(Gris Ge): It seems in the whole project,
|
|
Packit Service |
646995 |
* tmo is always -1, correct?
|
|
Packit Service |
646995 |
*/
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_ISCSI_TIM) {
|
|
Packit Service |
646995 |
printf("%s\t\t*********\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tTimeouts:\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\t*********\n", prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
printf("%s\t\tRecovery Timeout: %" PRIi32 "\n", prefix,
|
|
Packit Service |
646995 |
iscsi_session_recovery_tmo_get(curr));
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
tgt_reset_tmo = iscsi_session_tgt_reset_tmo_get(curr);
|
|
Packit Service |
646995 |
lu_reset_tmo = iscsi_session_lu_reset_tmo_get(curr);
|
|
Packit Service |
646995 |
abort_tmo = iscsi_session_abort_tmo_get(curr);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (tgt_reset_tmo >= 0)
|
|
Packit Service |
646995 |
printf("%s\t\tTarget Reset Timeout: %" PRIi32
|
|
Packit Service |
646995 |
"\n", prefix, tgt_reset_tmo);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\t\tTarget Reset Timeout: %s\n",
|
|
Packit Service |
646995 |
prefix, UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (lu_reset_tmo >= 0)
|
|
Packit Service |
646995 |
printf("%s\t\tLUN Reset Timeout: %" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, lu_reset_tmo);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\t\tLUN Reset Timeout: %s\n", prefix,
|
|
Packit Service |
646995 |
UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (abort_tmo >= 0)
|
|
Packit Service |
646995 |
printf("%s\t\tAbort Timeout: %" PRIi32 "\n",
|
|
Packit Service |
646995 |
prefix, abort_tmo);
|
|
Packit Service |
646995 |
else
|
|
Packit Service |
646995 |
printf("%s\t\tAbort Timeout: %s\n", prefix,
|
|
Packit Service |
646995 |
UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_ISCSI_AUTH) {
|
|
Packit Service |
646995 |
printf("%s\t\t*****\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tCHAP:\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\t*****\n", prefix);
|
|
Packit Service |
646995 |
printf("%s\t\tusername: %s\n", prefix,
|
|
Packit Service |
646995 |
strlen(iscsi_session_username_get(curr)) ?
|
|
Packit Service |
646995 |
iscsi_session_username_get(curr) :
|
|
Packit Service |
646995 |
UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (!do_show)
|
|
Packit Service |
646995 |
printf("%s\t\tpassword: %s\n", prefix,
|
|
Packit Service |
646995 |
"********");
|
|
Packit Service |
646995 |
else {
|
|
Packit Service |
646995 |
pass = iscsi_session_password_get(curr);
|
|
Packit Service |
646995 |
printf("%s\t\tpassword: %s\n", prefix,
|
|
Packit Service |
646995 |
strlen(pass) ? pass : UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
printf("%s\t\tusername_in: %s\n", prefix,
|
|
Packit Service |
646995 |
strlen(iscsi_session_username_in_get(curr)) ?
|
|
Packit Service |
646995 |
iscsi_session_username_in_get(curr) :
|
|
Packit Service |
646995 |
UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
if (!do_show)
|
|
Packit Service |
646995 |
printf("%s\t\tpassword_in: %s\n", prefix,
|
|
Packit Service |
646995 |
"********");
|
|
Packit Service |
646995 |
else {
|
|
Packit Service |
646995 |
pass = iscsi_session_password_in_get(curr);
|
|
Packit Service |
646995 |
printf("%s\t\tpassword: %s\n", prefix,
|
|
Packit Service |
646995 |
strlen(pass) ? pass : UNKNOWN_VALUE);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & SESSION_INFO_ISCSI_PARAMS)
|
|
Packit Service |
646995 |
print_iscsi_params((int) sid, prefix);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (flags & (SESSION_INFO_SCSI_DEVS | SESSION_INFO_HOST_DEVS))
|
|
Packit Service |
646995 |
print_scsi_state((int) sid, prefix, flags);
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
prev = curr;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
int session_info_print(int info_level, struct iscsi_session **ses,
|
|
Packit Service |
646995 |
uint32_t se_count, int do_show)
|
|
Packit Service |
646995 |
{
|
|
Packit Service |
646995 |
int err = 0;
|
|
Packit Service |
646995 |
char *version;
|
|
Packit Service |
646995 |
unsigned int flags = 0;
|
|
Packit Service |
646995 |
uint32_t i = 0;
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
switch (info_level) {
|
|
Packit Service |
646995 |
case 0:
|
|
Packit Service |
646995 |
case -1:
|
|
Packit Service |
646995 |
for (i = 0; i < se_count; ++i) {
|
|
Packit Service |
646995 |
err = session_info_print_flat(ses[i]);
|
|
Packit Service |
646995 |
if (err != 0)
|
|
Packit Service |
646995 |
break;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
break;
|
|
Packit Service |
646995 |
case 3:
|
|
Packit Service |
646995 |
version = iscsi_sysfs_get_iscsi_kernel_version();
|
|
Packit Service |
646995 |
if (version) {
|
|
Packit Service |
646995 |
printf("iSCSI Transport Class version %s\n",
|
|
Packit Service |
646995 |
version);
|
|
Packit Service |
646995 |
printf("version %s\n", ISCSI_VERSION_STR);
|
|
Packit Service |
646995 |
free(version);
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
flags |= (SESSION_INFO_SCSI_DEVS | SESSION_INFO_HOST_DEVS);
|
|
Packit Service |
646995 |
/* fall through */
|
|
Packit Service |
646995 |
case 2:
|
|
Packit Service |
646995 |
flags |= (SESSION_INFO_ISCSI_PARAMS | SESSION_INFO_ISCSI_TIM
|
|
Packit Service |
646995 |
| SESSION_INFO_ISCSI_AUTH);
|
|
Packit Service |
646995 |
/* fall through */
|
|
Packit Service |
646995 |
case 1:
|
|
Packit Service |
646995 |
flags |= (SESSION_INFO_ISCSI_STATE | SESSION_INFO_IFACE);
|
|
Packit Service |
646995 |
session_info_print_tree(ses, se_count, "", flags, do_show);
|
|
Packit Service |
646995 |
break;
|
|
Packit Service |
646995 |
default:
|
|
Packit Service |
646995 |
log_error("Invalid info level %d. Try 0 - 3.", info_level);
|
|
Packit Service |
646995 |
return ISCSI_ERR_INVAL;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
|
|
Packit Service |
646995 |
if (err) {
|
|
Packit Service |
646995 |
log_error("Can not get list of active sessions (%d)", err);
|
|
Packit Service |
646995 |
return err;
|
|
Packit Service |
646995 |
}
|
|
Packit Service |
646995 |
return 0;
|
|
Packit Service |
646995 |
}
|