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