OpenSolaris_b135/cmd/iscsi/iscsitgtd/iscsi_sess.h

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SESSION_H
#define	_SESSION_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

/*
 * Block comment which describes the contents of this file.
 */

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <sys/iscsi_authclient.h>
#include "iscsi_cmd.h"
#include "t10.h"

/*
 * iSCSI Auth Information
 */
typedef struct iscsi_auth {
	IscsiAuthStringBlock    auth_recv_string_block;
	IscsiAuthStringBlock    auth_send_string_block;
	IscsiAuthLargeBinary    auth_recv_binary_block;
	IscsiAuthLargeBinary    auth_send_binary_block;
	IscsiAuthClient		auth_client_block;
	int			num_auth_buffers;
	IscsiAuthBufferDesc	auth_buffers[5];

	/*
	 * To indicate if authentication is enabled.
	 * 0 means authentication disabled.
	 * 1 means authentication enabled.
	 */
	int			auth_enabled;

	/* Initiator's authentication information. */
	char			username[iscsiAuthStringMaxLength];
	uint8_t			password[iscsiAuthStringMaxLength];
	int			password_length;

	/* Target's authentication information. */
	char			username_in[iscsiAuthStringMaxLength];
	uint8_t			password_in[iscsiAuthStringMaxLength];
	int			password_length_in;
} iscsi_auth_t;

typedef enum iscsi_session_type {
	SessionDiscovery, SessionNormal
} iscsi_session_type_t;

typedef enum iscsi_session_state {
	SS_FREE, SS_STARTED, SS_RUNNING, SS_SHUTDOWN_START, SS_SHUTDOWN_CMPLT
} iscsi_sess_state_t;

typedef struct iscsi_sess {
	struct iscsi_sess	*s_next;

	iscsi_sess_state_t	s_state;

	/*
	 * Set during login
	 * mutex isn't held.
	 */
	char			*s_i_name,
				*s_i_alias,
				*s_t_name;
	uint8_t			s_isid[6];
	/*
	 * This is the highest packet number we've seen and is
	 * used during replies.
	 */
	int			s_seencmdsn;

	/*
	 * To keep the correct order of PDU's submitted to the SCSI
	 * layer we check that the incoming cmdsn matches this value.
	 * Otherwise, we're missing a packet and need to wait. This
	 * is particularly important with multiple connections per
	 * session.
	 */
	int			s_cmdsn;

	iscsi_session_type_t	s_type;

	/*
	 * Set during allocation of this struct and only referenced
	 */
	int			s_tsid;

	target_queue_t		*s_sessq,
				*s_t10q,
				*s_mgmtq;

	t10_targ_handle_t	s_t10;

	struct iscsi_conn	*s_conn_head;

	int			s_num;

	pthread_mutex_t 	s_mutex;
	iscsi_auth_t		sess_auth;
	pthread_t		s_thr_id_conn,
				s_thr_id_t10;
} iscsi_sess_t;

void session_init();
Boolean_t session_alloc(struct iscsi_conn *c, uint8_t *isid);
Boolean_t session_validate(struct iscsi_sess *s);

#ifdef __cplusplus
}
#endif

#endif /* _SESSION_H */