Blame usr/config.h

Packit eace71
/*
Packit eace71
 * iSCSI Configuration
Packit eace71
 *
Packit eace71
 * Copyright (C) 2002 Cisco Systems, Inc.
Packit eace71
 * maintained by linux-iscsi-devel@lists.sourceforge.net
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
Packit eace71
 * by the Free Software Foundation; either version 2 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, but
Packit eace71
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit eace71
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit eace71
 * General Public License for more details.
Packit eace71
 *
Packit eace71
 * See the file COPYING included with this distribution for more details.
Packit eace71
 */
Packit eace71
Packit eace71
#ifndef CONFIG_H
Packit eace71
#define CONFIG_H
Packit eace71
Packit eace71
#include <netdb.h>
Packit eace71
#include <net/if.h>
Packit eace71
Packit eace71
#include "types.h"
Packit eace71
#include "auth.h"	/* for the username and password sizes */
Packit eace71
#include "list.h"
Packit eace71
#include "iscsi_proto.h"
Packit eace71
#include "iscsi_net_util.h"
Packit eace71
Packit eace71
/* ISIDs now have a typed naming authority in them.  We use an OUI */
Packit eace71
#define DRIVER_ISID_0  0x00
Packit eace71
#define DRIVER_ISID_1  0x02
Packit eace71
#define DRIVER_ISID_2  0x3D
Packit eace71
Packit eace71
/* number of possible connections per session */
Packit eace71
#define ISCSI_CONN_MAX		1
Packit eace71
/* max len of interface */
Packit eace71
#define ISCSI_MAX_IFACE_LEN	65
Packit eace71
Packit eace71
/* the following structures store the options set in the config file.
Packit eace71
 * a structure is defined for each logically-related group of options.
Packit eace71
 * if you are adding a new option, first check if it should belong
Packit eace71
 * to one of the existing groups.  If it does, add it.  If not, define
Packit eace71
 * a new structure.
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
	unsigned int authmethod;
Packit eace71
	char username[AUTH_STR_MAX_LEN];
Packit eace71
	unsigned char password[AUTH_STR_MAX_LEN];
Packit eace71
	unsigned int password_length;
Packit eace71
	char username_in[AUTH_STR_MAX_LEN];
Packit eace71
	unsigned char password_in[AUTH_STR_MAX_LEN];
Packit eace71
	unsigned int password_in_length;
Packit Service 342b59
	unsigned int chap_algs[AUTH_CHAP_ALG_MAX_COUNT];
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_connection_timeout_config {
Packit eace71
	int login_timeout;
Packit eace71
	int logout_timeout;
Packit eace71
	int auth_timeout;
Packit eace71
	int active_timeout;
Packit eace71
	int noop_out_interval;
Packit eace71
	int noop_out_timeout;
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_timeout_config {
Packit eace71
	int 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_timeout_config {
Packit eace71
	int abort_timeout;
Packit eace71
	int host_reset_timeout;
Packit eace71
	int lu_reset_timeout;
Packit eace71
	int tgt_reset_timeout;
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
	int window_size;
Packit eace71
	int type_of_service;	/* try to set IP TOS bits */
Packit eace71
};
Packit eace71
Packit eace71
struct iscsi_conn_operational_config {
Packit eace71
	int MaxRecvDataSegmentLength;
Packit eace71
	int MaxXmitDataSegmentLength;
Packit eace71
	int HeaderDigest;
Packit eace71
	int DataDigest;
Packit eace71
	int IFMarker;
Packit eace71
	int OFMarker;
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_operational_config {
Packit eace71
	int DataPDUInOrder;
Packit eace71
	int DataSequenceInOrder;
Packit eace71
	int protocol;
Packit eace71
	int InitialR2T;
Packit eace71
	int ImmediateData;
Packit eace71
	int FirstBurstLength;
Packit eace71
	int MaxBurstLength;
Packit eace71
	int DefaultTime2Wait;
Packit eace71
	int DefaultTime2Retain;
Packit eace71
	int MaxConnections;
Packit eace71
	int MaxOutstandingR2T;
Packit eace71
	int ERL;
Packit eace71
	int FastAbort;
Packit eace71
};
Packit eace71
Packit eace71
#define CONFIG_DIGEST_NEVER  0
Packit eace71
#define CONFIG_DIGEST_ALWAYS 1
Packit eace71
#define CONFIG_DIGEST_PREFER_ON 2
Packit eace71
#define CONFIG_DIGEST_PREFER_OFF 3
Packit eace71
Packit eace71
struct iscsi_sendtargets_config {
Packit eace71
	int reopen_max;
Packit eace71
	int use_discoveryd;
Packit eace71
	int discoveryd_poll_inval;
Packit eace71
	struct iscsi_auth_config auth;
Packit eace71
	struct iscsi_connection_timeout_config conn_timeo;
Packit eace71
	struct iscsi_conn_operational_config conn_conf;
Packit eace71
	struct iscsi_session_operational_config session_conf;
Packit eace71
};
Packit eace71
Packit eace71
struct iscsi_isns_config {
Packit eace71
	int use_discoveryd;
Packit eace71
	int discoveryd_poll_inval;
Packit eace71
};
Packit eace71
Packit eace71
struct iscsi_slp_config {
Packit eace71
	char *scopes;
Packit eace71
	char *interfaces;	/* for multicast, list of interfaces names,
Packit eace71
				 * "all", or "none" */
Packit eace71
	int poll_interval;
Packit eace71
	struct iscsi_auth_config auth;
Packit eace71
};
Packit eace71
Packit eace71
typedef enum iscsi_startup {
Packit eace71
	ISCSI_STARTUP_MANUAL,
Packit eace71
	ISCSI_STARTUP_AUTOMATIC,
Packit eace71
	ISCSI_STARTUP_ONBOOT,
Packit eace71
} iscsi_startup_e;
Packit eace71
Packit eace71
typedef 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
} discovery_type_e;
Packit eace71
Packit eace71
typedef struct conn_rec {
Packit eace71
	iscsi_startup_e				startup;
Packit eace71
	char					address[NI_MAXHOST];
Packit eace71
	int					port;
Packit eace71
	struct iscsi_tcp_config			tcp;
Packit eace71
	struct iscsi_connection_timeout_config	timeo;
Packit eace71
	struct iscsi_conn_operational_config	iscsi;
Packit eace71
} conn_rec_t;
Packit eace71
Packit eace71
typedef struct session_rec {
Packit eace71
	int					initial_cmdsn;
Packit eace71
	int					reopen_max;
Packit eace71
	int					xmit_thread_priority;
Packit eace71
	int					cmds_max;
Packit eace71
	int					queue_depth;
Packit eace71
	int					initial_login_retry_max;
Packit eace71
	int					nr_sessions;
Packit eace71
	int					scan;
Packit eace71
	struct iscsi_auth_config		auth;
Packit eace71
	struct iscsi_session_timeout_config	timeo;
Packit eace71
	struct iscsi_error_timeout_config	err_timeo;
Packit eace71
	struct iscsi_session_operational_config	iscsi;
Packit eace71
	struct session_info			*info;
Packit eace71
	unsigned                                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
} session_rec_t;
Packit eace71
Packit eace71
#define ISCSI_TRANSPORT_NAME_MAXLEN 16
Packit eace71
#define ISCSI_MAX_STR_LEN 80
Packit eace71
Packit eace71
typedef struct iface_rec {
Packit eace71
	struct list_head	list;
Packit eace71
	/* iscsi iface record name */
Packit eace71
	char			name[ISCSI_MAX_IFACE_LEN];
Packit eace71
	uint32_t		iface_num;
Packit eace71
	/* network layer iface name (eth0) */
Packit eace71
	char			netdev[IFNAMSIZ];
Packit eace71
	char			ipaddress[NI_MAXHOST];
Packit eace71
	char			subnet_mask[NI_MAXHOST];
Packit eace71
	char			gateway[NI_MAXHOST];
Packit eace71
	char			bootproto[ISCSI_MAX_STR_LEN];
Packit eace71
	char			ipv6_linklocal[NI_MAXHOST];
Packit eace71
	char			ipv6_router[NI_MAXHOST];
Packit eace71
	char			ipv6_autocfg[NI_MAXHOST];
Packit eace71
	char			linklocal_autocfg[NI_MAXHOST];
Packit eace71
	char			router_autocfg[NI_MAXHOST];
Packit eace71
	uint8_t			prefix_len;
Packit eace71
	uint16_t		vlan_id;
Packit eace71
	uint8_t			vlan_priority;
Packit eace71
	char			vlan_state[ISCSI_MAX_STR_LEN];
Packit eace71
	char			state[ISCSI_MAX_STR_LEN]; /* 0 = disable,
Packit eace71
							   * 1 = enable */
Packit eace71
	uint16_t		mtu;
Packit eace71
	uint16_t		port;
Packit eace71
	char			delayed_ack[ISCSI_MAX_STR_LEN];
Packit eace71
	char			nagle[ISCSI_MAX_STR_LEN];
Packit eace71
	char			tcp_wsf_state[ISCSI_MAX_STR_LEN];
Packit eace71
	uint8_t			tcp_wsf;
Packit eace71
	uint8_t			tcp_timer_scale;
Packit eace71
	char			tcp_timestamp[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_dns[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_slp_da[ISCSI_MAX_STR_LEN];
Packit eace71
	char			tos_state[ISCSI_MAX_STR_LEN];
Packit eace71
	uint8_t			tos;
Packit eace71
	char			gratuitous_arp[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_alt_client_id_state[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_alt_client_id[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_req_vendor_id_state[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_vendor_id_state[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_vendor_id[ISCSI_MAX_STR_LEN];
Packit eace71
	char			dhcp_learn_iqn[ISCSI_MAX_STR_LEN];
Packit eace71
	char			fragmentation[ISCSI_MAX_STR_LEN];
Packit eace71
	char			incoming_forwarding[ISCSI_MAX_STR_LEN];
Packit eace71
	uint8_t			ttl;
Packit eace71
	char			gratuitous_neighbor_adv[ISCSI_MAX_STR_LEN];
Packit eace71
	char			redirect[ISCSI_MAX_STR_LEN];
Packit eace71
	char			mld[ISCSI_MAX_STR_LEN];
Packit eace71
	uint32_t		flow_label;
Packit eace71
	uint32_t		traffic_class;
Packit eace71
	uint8_t			hop_limit;
Packit eace71
	uint32_t		nd_reachable_tmo;
Packit eace71
	uint32_t		nd_rexmit_time;
Packit eace71
	uint32_t		nd_stale_tmo;
Packit eace71
	uint8_t			dup_addr_detect_cnt;
Packit eace71
	uint32_t		router_adv_link_mtu;
Packit eace71
	uint16_t		def_task_mgmt_tmo;
Packit eace71
	char			header_digest[ISCSI_MAX_STR_LEN];
Packit eace71
	char			data_digest[ISCSI_MAX_STR_LEN];
Packit eace71
	char			immediate_data[ISCSI_MAX_STR_LEN];
Packit eace71
	char			initial_r2t[ISCSI_MAX_STR_LEN];
Packit eace71
	char			data_seq_inorder[ISCSI_MAX_STR_LEN];
Packit eace71
	char			data_pdu_inorder[ISCSI_MAX_STR_LEN];
Packit eace71
	uint8_t			erl;
Packit eace71
	uint32_t		max_recv_dlength;
Packit eace71
	uint32_t		first_burst_len;
Packit eace71
	uint16_t		max_out_r2t;
Packit eace71
	uint32_t		max_burst_len;
Packit eace71
	char			chap_auth[ISCSI_MAX_STR_LEN];
Packit eace71
	char			bidi_chap[ISCSI_MAX_STR_LEN];
Packit eace71
	char			strict_login_comp[ISCSI_MAX_STR_LEN];
Packit eace71
	char			discovery_auth[ISCSI_MAX_STR_LEN];
Packit eace71
	char			discovery_logout[ISCSI_MAX_STR_LEN];
Packit eace71
	char			port_state[ISCSI_MAX_STR_LEN];
Packit eace71
	char			port_speed[ISCSI_MAX_STR_LEN];
Packit eace71
	/*
Packit eace71
	 * TODO: we may have to make this bigger and interconnect
Packit eace71
	 * specific for infiniband
Packit eace71
	 */
Packit eace71
	char			hwaddress[ISCSI_HWADDRESS_BUF_SIZE];
Packit eace71
	char			transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
Packit eace71
	/*
Packit eace71
	 * This is only used for boot now, but the iser guys
Packit eace71
	 * can use this for their virtualization idea.
Packit eace71
	 */
Packit eace71
	char			alias[TARGET_NAME_MAXLEN + 1];
Packit eace71
	char			iname[TARGET_NAME_MAXLEN + 1];
Packit eace71
} iface_rec_t;
Packit eace71
Packit eace71
typedef struct node_rec {
Packit eace71
	struct list_head	list;
Packit eace71
	char			name[TARGET_NAME_MAXLEN];
Packit eace71
	int			tpgt;
Packit eace71
	iscsi_startup_e		startup;
Packit eace71
	int			leading_login;
Packit eace71
	session_rec_t		session;
Packit eace71
	conn_rec_t		conn[ISCSI_CONN_MAX];
Packit eace71
	iface_rec_t		iface;
Packit eace71
	discovery_type_e	disc_type;
Packit eace71
	char			disc_address[NI_MAXHOST];
Packit eace71
	int			disc_port;
Packit eace71
} node_rec_t;
Packit eace71
Packit eace71
typedef struct discovery_rec {
Packit eace71
	iscsi_startup_e		startup;
Packit eace71
	discovery_type_e	type;
Packit eace71
	char			address[NI_MAXHOST];
Packit eace71
	int			port;
Packit eace71
	int			iscsid_req_tmo;
Packit eace71
	union {
Packit eace71
		struct iscsi_sendtargets_config	sendtargets;
Packit eace71
		struct iscsi_slp_config		slp;
Packit eace71
		struct iscsi_isns_config	isns;
Packit eace71
	} u;
Packit eace71
} discovery_rec_t;
Packit eace71
Packit eace71
#endif /* CONFIG_H */