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