Пример #1
0
static int sess_param(struct iscsi_target *target, struct iscsi_param_info *info, int set)
{
	struct iscsi_session *session = NULL;
	struct iscsi_sess_param *param;
	int err = -ENOENT;

	if (set)
		sess_param_check(info);

	if (info->sid) {
		if (!(session = session_lookup(target, info->sid)))
			goto out;
		param = &session->param;
	} else {
		param = &target->sess_param;
	}

	if (set) {
		sess_param_set(param, info);
		show_param(param);
	} else
		sess_param_get(param, info);

	err = 0;
out:
	return err;
}
Пример #2
0
static int get_conn_info(struct iscsi_target *target, unsigned long ptr)
{
	struct iscsi_session *session;
	struct iscsi_conn *conn;
	struct conn_info info;
	int err;

	err = copy_from_user(&info, (void *) ptr, sizeof(info));
	if (err)
		return -EFAULT;

	session = session_lookup(target, info.sid);
	if (!session)
		return -ENOENT;

	conn = conn_lookup(session, info.cid);
	if (!conn)
		return -ENOENT;

	info.cid = conn->cid;
	info.stat_sn = conn->stat_sn;
	info.exp_stat_sn = conn->exp_stat_sn;

	err = copy_to_user((void *) ptr, &info, sizeof(info));
	if (err)
		return -EFAULT;

	return 0;
}
Пример #3
0
static int add_conn(struct iscsi_target *target, unsigned long ptr)
{
	int err;
	struct iscsi_session *session;
	struct conn_info info;

	if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0)
		return err;

	if (!(session = session_lookup(target, info.sid)))
		return -ENOENT;

	return conn_add(session, &info);
}
Пример #4
0
static int del_conn(struct iscsi_target *target, unsigned long ptr)
{
	struct iscsi_session *session;
	struct conn_info info;
	int err;

	err = copy_from_user(&info, (void *) ptr, sizeof(info));
	if (err)
		return -EFAULT;

	session = session_lookup(target, info.sid);
	if (!session)
		return -ENOENT;

	return conn_del(session, &info);
}
Пример #5
0
/* 连接信息从用户态转入内核态 */
static int add_conn(struct iscsi_target *target, unsigned long ptr)
{
	struct iscsi_session *session;
	struct conn_info info;
	int err;

	/* 拷贝用户态连接信息 */
	err = copy_from_user(&info, (void *) ptr, sizeof(info));
	if (err)
		return -EFAULT;

	/* 根据target和用户态连接信息中的会话id, 找到会话信息 */
	session = session_lookup(target, info.sid);
	if (!session)
		return -ENOENT;

	return conn_add(session, &info);
}
Пример #6
0
static int get_session_info(struct iscsi_target *target, unsigned long ptr)
{
	int err;
	struct iscsi_session *session;
	struct session_info info;

	if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0)
		return err;

	session = session_lookup(target, info.sid);

	if (!session)
		return -ENOENT;

	info.exp_cmd_sn = session->exp_cmd_sn;
	info.max_cmd_sn = session->max_cmd_sn;

	if (copy_to_user((void *) ptr, &info, sizeof(info)))
		return -EFAULT;

	return 0;
}
Пример #7
0
session_t *session_lookup_exi(struct v2gEXIDocument *exiIn)
{
    uint64_t sessionid;
    memcpy(&sessionid, exiIn->V2G_Message.Header.SessionID.bytes, 8);
    return session_lookup(sessionid);
}