Blame libopeniscsiusr/idbm.h

Packit Service 646995
/*
Packit Service 646995
 * Copyright (C) 2017-2018 Red Hat, Inc.
Packit Service 646995
 *
Packit Service 646995
 * This program is free software: you can redistribute it and/or modify
Packit Service 646995
 * it under the terms of the GNU General Public License as published by
Packit Service 646995
 * the Free Software Foundation, either version 3 of the License, or
Packit Service 646995
 * (at your option) any later version.
Packit Service 646995
 *
Packit Service 646995
 * This program is distributed in the hope that it will be useful,
Packit Service 646995
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 646995
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 646995
 * GNU General Public License for more details.
Packit Service 646995
 *
Packit Service 646995
 * You should have received a copy of the GNU General Public License
Packit Service 646995
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 646995
 *
Packit Service 646995
 * Author: Gris Ge <fge@redhat.com>
Packit Service 646995
 */
Packit Service 646995
Packit Service 646995
#ifndef _GNU_SOURCE
Packit Service 646995
#define _GNU_SOURCE			/* For NI_MAXHOST */
Packit Service 646995
#endif
Packit Service 646995
Packit Service 646995
#ifndef __ISCSI_OPEN_USR_IDBM_H__
Packit Service 646995
#define __ISCSI_OPEN_USR_IDBM_H__
Packit Service 646995
Packit Service 646995
#include <stdio.h>
Packit Service 646995
#include <stdbool.h>
Packit Service 646995
#include <netdb.h>
Packit Service 646995
Packit Service 646995
#include "libopeniscsiusr/libopeniscsiusr_common.h"
Packit Service 646995
Packit Service 646995
#define ISCSI_CONFIG_ROOT	"/etc/iscsi/"
Packit Service f80f6b
#define IFACE_CONFIG_DIR	ISCSI_CONFIG_ROOT"ifaces"
Packit Service 646995
#define AUTH_STR_MAX_LEN	256
Packit Service 646995
#define BOOT_NAME_MAXLEN	256
Packit Service 646995
#define IDBM_DUMP_SIZE		8192
Packit Service 646995
Packit Service 646995
Packit Service 646995
struct __DLL_LOCAL idbm;
Packit Service 646995
Packit Service 646995
struct idbm {
Packit Service 646995
	int		refs;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum iscsi_auth_method {
Packit Service 646995
	ISCSI_AUTH_METHOD_NONE,
Packit Service 646995
	ISCSI_AUTH_METHOD_CHAP,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum iscsi_chap_algs {
Packit Service 646995
	ISCSI_AUTH_CHAP_ALG_MD5 = 5,
Packit Service 646995
	ISCSI_AUTH_CHAP_ALG_SHA1 = 6,
Packit Service 646995
	ISCSI_AUTH_CHAP_ALG_SHA256 = 7,
Packit Service 646995
	ISCSI_AUTH_CHAP_ALG_SHA3_256 = 8,
Packit Service 646995
	AUTH_CHAP_ALG_MAX_COUNT = 5,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum iscsi_startup_type {
Packit Service 646995
	ISCSI_STARTUP_MANUAL,
Packit Service 646995
	ISCSI_STARTUP_AUTOMATIC,
Packit Service 646995
	ISCSI_STARTUP_ONBOOT,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum discovery_type {
Packit Service 646995
	DISCOVERY_TYPE_SENDTARGETS,
Packit Service 646995
	DISCOVERY_TYPE_ISNS,
Packit Service 646995
	DISCOVERY_TYPE_OFFLOAD_SENDTARGETS,
Packit Service 646995
	DISCOVERY_TYPE_SLP,
Packit Service 646995
	DISCOVERY_TYPE_STATIC,
Packit Service 646995
	DISCOVERY_TYPE_FW,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum leading_login_type {
Packit Service 646995
	LEADING_LOGIN_NO,
Packit Service 646995
	LEADING_LOGIN_YES,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum init_scan_type {
Packit Service 646995
	INIT_SCAN_MANUAL,
Packit Service 646995
	INIT_SCAN_AUTO,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
enum digest_type {
Packit Service 646995
	DIGEST_NEVER,
Packit Service 646995
	DIGEST_ALWAYS,
Packit Service 646995
	DIGEST_PREFER_ON,
Packit Service 646995
	DIGEST_PREFER_OFF,
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all authentication-related options should be added to this structure.
Packit Service 646995
 * this structure is per-session, and can be configured
Packit Service 646995
 * by TargetName but not Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_auth_config {
Packit Service 646995
	enum iscsi_auth_method			authmethod;
Packit Service 646995
	char					username[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned char				password[AUTH_STR_MAX_LEN];
Packit Service 646995
	uint32_t				password_length;
Packit Service 646995
	char					username_in[AUTH_STR_MAX_LEN];
Packit Service 646995
	unsigned char				password_in[AUTH_STR_MAX_LEN];
Packit Service 646995
	uint32_t				password_in_length;
Packit Service 646995
	unsigned int				chap_algs[AUTH_CHAP_ALG_MAX_COUNT];
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all TCP options go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_tcp_config {
Packit Service 646995
	int64_t					window_size;
Packit Service 646995
	int64_t					type_of_service;
Packit Service 646995
	/* ^ try to set IP TOS bits */
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all per-session timeouts go in this structure.
Packit Service 646995
 * this structure is per-session, and can be configured
Packit Service 646995
 * by TargetName but not by Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_session_tmo_cfg {
Packit Service 646995
	int64_t					replacement_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all error handling timeouts go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_error_tmo_cfg {
Packit Service 646995
	int64_t					abort_timeout;
Packit Service 646995
	int64_t					host_reset_timeout;
Packit Service 646995
	int64_t					lu_reset_timeout;
Packit Service 646995
	int64_t					tgt_reset_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all per-connection timeouts go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_conn_tmo_cfg {
Packit Service 646995
	int64_t					login_timeout;
Packit Service 646995
	int64_t					logout_timeout;
Packit Service 646995
	int64_t					auth_timeout;
Packit Service 646995
	int64_t					active_timeout;
Packit Service 646995
	int64_t					noop_out_interval;
Packit Service 646995
	int64_t					noop_out_timeout;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_conn_op_cfg {
Packit Service 646995
	int64_t					MaxRecvDataSegmentLength;
Packit Service 646995
	int64_t					MaxXmitDataSegmentLength;
Packit Service 646995
	enum digest_type			HeaderDigest;
Packit Service 646995
	enum digest_type			DataDigest;
Packit Service 646995
	bool					IFMarker;
Packit Service 646995
	bool					OFMarker;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_conn {
Packit Service 646995
	enum iscsi_startup_type			startup;
Packit Service 646995
	char					address[NI_MAXHOST];
Packit Service 646995
	int32_t					port;
Packit Service 646995
	struct iscsi_tcp_config			tcp;
Packit Service 646995
	struct iscsi_conn_tmo_cfg		tmo;
Packit Service 646995
	struct iscsi_conn_op_cfg		op_cfg;
Packit Service 646995
	bool					is_ipv6;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
/* all iSCSI operational params go in this structure.
Packit Service 646995
 * this structure is per-portal, and can be configured
Packit Service 646995
 * both by TargetName and Subnet.
Packit Service 646995
 */
Packit Service 646995
struct iscsi_session_op_cfg {
Packit Service 646995
	int64_t					DataPDUInOrder;
Packit Service 646995
	int64_t					DataSequenceInOrder;
Packit Service 646995
	int64_t					protocol;
Packit Service 646995
	bool					InitialR2T;
Packit Service 646995
	bool					ImmediateData;
Packit Service 646995
	int64_t					FirstBurstLength;
Packit Service 646995
	int64_t					MaxBurstLength;
Packit Service 646995
	int64_t					DefaultTime2Wait;
Packit Service 646995
	int64_t					DefaultTime2Retain;
Packit Service 646995
	int64_t					MaxConnections;
Packit Service 646995
	int64_t					MaxOutstandingR2T;
Packit Service 646995
	int64_t					ERL;
Packit Service 646995
	bool					FastAbort;
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
struct iscsi_session_idbm {
Packit Service 646995
	uint32_t				initial_cmdsn;
Packit Service 646995
	int64_t					reopen_max;
Packit Service 646995
	int64_t					initial_login_retry_max;
Packit Service 646995
	int64_t					xmit_thread_priority;
Packit Service 646995
	uint16_t				cmds_max;
Packit Service 646995
	uint16_t				queue_depth;
Packit Service 646995
	int64_t					nr_sessions;
Packit Service 646995
	enum init_scan_type			scan;
Packit Service 646995
	struct iscsi_auth_config		auth;
Packit Service 646995
	struct iscsi_session_tmo_cfg		tmo;
Packit Service 646995
	struct iscsi_error_tmo_cfg		err_tmo;
Packit Service 646995
	struct iscsi_session_op_cfg		op_cfg;
Packit Service 646995
	struct iscsi_session			*se;
Packit Service 646995
	uint32_t				sid;
Packit Service 646995
	/*
Packit Service 646995
	 * This is a flag passed to iscsid.  If set, multiple sessions are
Packit Service 646995
	 * allowed to be initiated on this record
Packit Service 646995
	 */
Packit Service 646995
	unsigned char				multiple;
Packit Service 646995
	char					boot_root[BOOT_NAME_MAXLEN];
Packit Service 646995
	char					boot_nic[BOOT_NAME_MAXLEN];
Packit Service 646995
	char					boot_target[BOOT_NAME_MAXLEN];
Packit Service 646995
Packit Service 646995
};
Packit Service 646995
Packit Service 646995
__DLL_LOCAL struct idbm *_idbm_new(void);
Packit Service 646995
__DLL_LOCAL void _idbm_free(struct idbm *db);
Packit Service 646995
__DLL_LOCAL int _idbm_lock(struct iscsi_context *ctx);
Packit Service 646995
__DLL_LOCAL void _idbm_unlock(struct iscsi_context *ctx);
Packit Service 646995
__DLL_LOCAL void _idbm_iface_print(struct iscsi_iface *iface, FILE *f);
Packit Service 646995
__DLL_LOCAL int _idbm_iface_get(struct iscsi_context *ctx,
Packit Service 646995
				const char *iface_name,
Packit Service 646995
				struct iscsi_iface **iface);
Packit Service 646995
__DLL_LOCAL int _idbm_node_get(struct iscsi_context *ctx,
Packit Service 646995
				const char *target_name,
Packit Service 646995
				const char *portal,
Packit Service 646995
				const char *iface_name,
Packit Service 646995
				struct iscsi_node **node);
Packit Service 646995
__DLL_LOCAL void _idbm_node_print(struct iscsi_node *node, FILE *f,
Packit Service 646995
				  bool show_secret);
Packit Service 646995
Packit Service 646995
#endif /* End of __ISCSI_OPEN_USR_IDBM_H__ */