brintos

brintos / linux-shallow public Read only

0
0
Text · 25.6 KiB · 5225a23 Raw
955 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * iSCSI User/Kernel Shares (Defines, Constants, Protocol definitions, etc)4 *5 * Copyright (C) 2005 Dmitry Yusupov6 * Copyright (C) 2005 Alex Aizman7 * maintained by open-iscsi@googlegroups.com8 */9 10#ifndef ISCSI_IF_H11#define ISCSI_IF_H12 13#include <scsi/iscsi_proto.h>14#include <linux/in.h>15#include <linux/in6.h>16 17#define ISCSI_NL_GRP_ISCSID	118#define ISCSI_NL_GRP_UIP	219 20#define UEVENT_BASE			1021#define KEVENT_BASE			10022#define ISCSI_ERR_BASE			100023 24enum iscsi_uevent_e {25	ISCSI_UEVENT_UNKNOWN		= 0,26 27	/* down events */28	ISCSI_UEVENT_CREATE_SESSION	= UEVENT_BASE + 1,29	ISCSI_UEVENT_DESTROY_SESSION	= UEVENT_BASE + 2,30	ISCSI_UEVENT_CREATE_CONN	= UEVENT_BASE + 3,31	ISCSI_UEVENT_DESTROY_CONN	= UEVENT_BASE + 4,32	ISCSI_UEVENT_BIND_CONN		= UEVENT_BASE + 5,33	ISCSI_UEVENT_SET_PARAM		= UEVENT_BASE + 6,34	ISCSI_UEVENT_START_CONN		= UEVENT_BASE + 7,35	ISCSI_UEVENT_STOP_CONN		= UEVENT_BASE + 8,36	ISCSI_UEVENT_SEND_PDU		= UEVENT_BASE + 9,37	ISCSI_UEVENT_GET_STATS		= UEVENT_BASE + 10,38	ISCSI_UEVENT_GET_PARAM		= UEVENT_BASE + 11,39 40	ISCSI_UEVENT_TRANSPORT_EP_CONNECT	= UEVENT_BASE + 12,41	ISCSI_UEVENT_TRANSPORT_EP_POLL		= UEVENT_BASE + 13,42	ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT	= UEVENT_BASE + 14,43 44	ISCSI_UEVENT_TGT_DSCVR		= UEVENT_BASE + 15,45	ISCSI_UEVENT_SET_HOST_PARAM	= UEVENT_BASE + 16,46	ISCSI_UEVENT_UNBIND_SESSION	= UEVENT_BASE + 17,47	ISCSI_UEVENT_CREATE_BOUND_SESSION		= UEVENT_BASE + 18,48	ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST	= UEVENT_BASE + 19,49 50	ISCSI_UEVENT_PATH_UPDATE	= UEVENT_BASE + 20,51	ISCSI_UEVENT_SET_IFACE_PARAMS	= UEVENT_BASE + 21,52	ISCSI_UEVENT_PING		= UEVENT_BASE + 22,53	ISCSI_UEVENT_GET_CHAP		= UEVENT_BASE + 23,54	ISCSI_UEVENT_DELETE_CHAP	= UEVENT_BASE + 24,55	ISCSI_UEVENT_SET_FLASHNODE_PARAMS	= UEVENT_BASE + 25,56	ISCSI_UEVENT_NEW_FLASHNODE	= UEVENT_BASE + 26,57	ISCSI_UEVENT_DEL_FLASHNODE	= UEVENT_BASE + 27,58	ISCSI_UEVENT_LOGIN_FLASHNODE	= UEVENT_BASE + 28,59	ISCSI_UEVENT_LOGOUT_FLASHNODE	= UEVENT_BASE + 29,60	ISCSI_UEVENT_LOGOUT_FLASHNODE_SID	= UEVENT_BASE + 30,61	ISCSI_UEVENT_SET_CHAP		= UEVENT_BASE + 31,62	ISCSI_UEVENT_GET_HOST_STATS	= UEVENT_BASE + 32,63	ISCSI_UEVENT_DESTROY_SESSION_ASYNC	= UEVENT_BASE + 33,64 65	/* up events */66	ISCSI_KEVENT_RECV_PDU		= KEVENT_BASE + 1,67	ISCSI_KEVENT_CONN_ERROR		= KEVENT_BASE + 2,68	ISCSI_KEVENT_IF_ERROR		= KEVENT_BASE + 3,69	ISCSI_KEVENT_DESTROY_SESSION	= KEVENT_BASE + 4,70	ISCSI_KEVENT_UNBIND_SESSION	= KEVENT_BASE + 5,71	ISCSI_KEVENT_CREATE_SESSION	= KEVENT_BASE + 6,72 73	ISCSI_KEVENT_PATH_REQ		= KEVENT_BASE + 7,74	ISCSI_KEVENT_IF_DOWN		= KEVENT_BASE + 8,75	ISCSI_KEVENT_CONN_LOGIN_STATE   = KEVENT_BASE + 9,76	ISCSI_KEVENT_HOST_EVENT		= KEVENT_BASE + 10,77	ISCSI_KEVENT_PING_COMP		= KEVENT_BASE + 11,78};79 80enum iscsi_tgt_dscvr {81	ISCSI_TGT_DSCVR_SEND_TARGETS	= 1,82	ISCSI_TGT_DSCVR_ISNS		= 2,83	ISCSI_TGT_DSCVR_SLP		= 3,84};85 86enum iscsi_host_event_code {87	ISCSI_EVENT_LINKUP		= 1,88	ISCSI_EVENT_LINKDOWN,89	/* must always be last */90	ISCSI_EVENT_MAX,91};92 93struct iscsi_uevent {94	uint32_t type; /* k/u events type */95	uint32_t iferror; /* carries interface or resource errors */96	uint64_t transport_handle;97 98	union {99		/* messages u -> k */100		struct msg_create_session {101			uint32_t	initial_cmdsn;102			uint16_t	cmds_max;103			uint16_t	queue_depth;104		} c_session;105		struct msg_create_bound_session {106			uint64_t	ep_handle;107			uint32_t	initial_cmdsn;108			uint16_t	cmds_max;109			uint16_t	queue_depth;110		} c_bound_session;111		struct msg_destroy_session {112			uint32_t	sid;113		} d_session;114		struct msg_create_conn {115			uint32_t	sid;116			uint32_t	cid;117		} c_conn;118		struct msg_bind_conn {119			uint32_t	sid;120			uint32_t	cid;121			uint64_t	transport_eph;122			uint32_t	is_leading;123		} b_conn;124		struct msg_destroy_conn {125			uint32_t	sid;126			uint32_t	cid;127		} d_conn;128		struct msg_send_pdu {129			uint32_t	sid;130			uint32_t	cid;131			uint32_t	hdr_size;132			uint32_t	data_size;133		} send_pdu;134		struct msg_set_param {135			uint32_t	sid;136			uint32_t	cid;137			uint32_t	param; /* enum iscsi_param */138			uint32_t	len;139		} set_param;140		struct msg_start_conn {141			uint32_t	sid;142			uint32_t	cid;143		} start_conn;144		struct msg_stop_conn {145			uint32_t	sid;146			uint32_t	cid;147			uint64_t	conn_handle;148			uint32_t	flag;149		} stop_conn;150		struct msg_get_stats {151			uint32_t	sid;152			uint32_t	cid;153		} get_stats;154		struct msg_transport_connect {155			uint32_t	non_blocking;156		} ep_connect;157		struct msg_transport_connect_through_host {158			uint32_t	host_no;159			uint32_t	non_blocking;160		} ep_connect_through_host;161		struct msg_transport_poll {162			uint64_t	ep_handle;163			uint32_t	timeout_ms;164		} ep_poll;165		struct msg_transport_disconnect {166			uint64_t	ep_handle;167		} ep_disconnect;168		struct msg_tgt_dscvr {169			enum iscsi_tgt_dscvr	type;170			uint32_t	host_no;171			/*172 			 * enable = 1 to establish a new connection173			 * with the server. enable = 0 to disconnect174			 * from the server. Used primarily to switch175			 * from one iSNS server to another.176			 */177			uint32_t	enable;178		} tgt_dscvr;179		struct msg_set_host_param {180			uint32_t	host_no;181			uint32_t	param; /* enum iscsi_host_param */182			uint32_t	len;183		} set_host_param;184		struct msg_set_path {185			uint32_t	host_no;186		} set_path;187		struct msg_set_iface_params {188			uint32_t	host_no;189			uint32_t	count;190		} set_iface_params;191		struct msg_iscsi_ping {192			uint32_t        host_no;193			uint32_t        iface_num;194			uint32_t        iface_type;195			uint32_t        payload_size;196			uint32_t	pid;	/* unique ping id associated197						   with each ping request */198		} iscsi_ping;199		struct msg_get_chap {200			uint32_t	host_no;201			uint32_t	num_entries; /* number of CHAP entries202						      * on request, number of203						      * valid CHAP entries on204						      * response */205			uint16_t	chap_tbl_idx;206		} get_chap;207		struct msg_delete_chap {208		       uint32_t        host_no;209		       uint16_t        chap_tbl_idx;210		} delete_chap;211		struct msg_set_flashnode_param {212			uint32_t	host_no;213			uint32_t	flashnode_idx;214			uint32_t	count;215		} set_flashnode;216		struct msg_new_flashnode {217			uint32_t	host_no;218			uint32_t	len;219		} new_flashnode;220		struct msg_del_flashnode {221			uint32_t	host_no;222			uint32_t	flashnode_idx;223		} del_flashnode;224		struct msg_login_flashnode {225			uint32_t	host_no;226			uint32_t	flashnode_idx;227		} login_flashnode;228		struct msg_logout_flashnode {229			uint32_t	host_no;230			uint32_t	flashnode_idx;231		} logout_flashnode;232		struct msg_logout_flashnode_sid {233			uint32_t	host_no;234			uint32_t	sid;235		} logout_flashnode_sid;236		struct msg_get_host_stats {237			uint32_t host_no;238		} get_host_stats;239	} u;240	union {241		/* messages k -> u */242		int			retcode;243		struct msg_create_session_ret {244			uint32_t	sid;245			uint32_t	host_no;246		} c_session_ret;247		struct msg_create_conn_ret {248			uint32_t	sid;249			uint32_t	cid;250		} c_conn_ret;251		struct msg_unbind_session {252			uint32_t	sid;253			uint32_t	host_no;254		} unbind_session;255		struct msg_recv_req {256			uint32_t	sid;257			uint32_t	cid;258			uint64_t	recv_handle;259		} recv_req;260		struct msg_conn_login {261			uint32_t        sid;262			uint32_t        cid;263			uint32_t        state; /* enum iscsi_conn_state */264		} conn_login;265		struct msg_conn_error {266			uint32_t	sid;267			uint32_t	cid;268			uint32_t	error; /* enum iscsi_err */269		} connerror;270		struct msg_session_destroyed {271			uint32_t	host_no;272			uint32_t	sid;273		} d_session;274		struct msg_transport_connect_ret {275			uint64_t	handle;276		} ep_connect_ret;277		struct msg_req_path {278			uint32_t	host_no;279		} req_path;280		struct msg_notify_if_down {281			uint32_t	host_no;282		} notify_if_down;283		struct msg_host_event {284			uint32_t	host_no;285			uint32_t	data_size;286			enum iscsi_host_event_code code;287		} host_event;288		struct msg_ping_comp {289			uint32_t        host_no;290			uint32_t        status; /* enum291						 * iscsi_ping_status_code */292			uint32_t	pid;	/* unique ping id associated293						   with each ping request */294			uint32_t        data_size;295		} ping_comp;296		struct msg_new_flashnode_ret {297			uint32_t	flashnode_idx;298		} new_flashnode_ret;299	} r;300} __attribute__ ((aligned (sizeof(uint64_t))));301 302enum iscsi_param_type {303	ISCSI_PARAM,		/* iscsi_param (session, conn, target, LU) */304	ISCSI_HOST_PARAM,	/* iscsi_host_param */305	ISCSI_NET_PARAM,	/* iscsi_net_param */306	ISCSI_FLASHNODE_PARAM,	/* iscsi_flashnode_param */307	ISCSI_CHAP_PARAM,	/* iscsi_chap_param */308	ISCSI_IFACE_PARAM,	/* iscsi_iface_param */309};310 311/* structure for minimalist usecase */312struct iscsi_param_info {313	uint32_t len;		/* Actual length of the param value */314	uint16_t param;		/* iscsi param */315	uint8_t value[];	/* length sized value follows */316} __packed;317 318struct iscsi_iface_param_info {319	uint32_t iface_num;	/* iface number, 0 - n */320	uint32_t len;		/* Actual length of the param */321	uint16_t param;		/* iscsi param value */322	uint8_t iface_type;	/* IPv4 or IPv6 */323	uint8_t param_type;	/* iscsi_param_type */324	uint8_t value[];	/* length sized value follows */325} __packed;326 327/*328 * To keep the struct iscsi_uevent size the same for userspace code329 * compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and330 * ISCSI_KEVENT_PATH_REQ is defined separately and comes after the331 * struct iscsi_uevent in the NETLINK_ISCSI message.332 */333struct iscsi_path {334	uint64_t	handle;335	uint8_t		mac_addr[6];336	uint8_t		mac_addr_old[6];337	uint32_t	ip_addr_len;	/* 4 or 16 */338	union {339		struct in_addr	v4_addr;340		struct in6_addr	v6_addr;341	} src;342	union {343		struct in_addr	v4_addr;344		struct in6_addr	v6_addr;345	} dst;346	uint16_t	vlan_id;347	uint16_t	pmtu;348} __attribute__ ((aligned (sizeof(uint64_t))));349 350/* iscsi iface enabled/disabled setting */351#define ISCSI_IFACE_DISABLE	0x01352#define ISCSI_IFACE_ENABLE	0x02353 354/* ipv4 bootproto */355#define ISCSI_BOOTPROTO_STATIC		0x01356#define ISCSI_BOOTPROTO_DHCP		0x02357 358/* ipv6 addr autoconfig type */359#define ISCSI_IPV6_AUTOCFG_DISABLE		0x01360#define ISCSI_IPV6_AUTOCFG_ND_ENABLE		0x02361#define ISCSI_IPV6_AUTOCFG_DHCPV6_ENABLE	0x03362 363/* ipv6 link local addr type */364#define ISCSI_IPV6_LINKLOCAL_AUTOCFG_ENABLE	0x01365#define ISCSI_IPV6_LINKLOCAL_AUTOCFG_DISABLE	0x02366 367/* ipv6 router addr type */368#define ISCSI_IPV6_ROUTER_AUTOCFG_ENABLE	0x01369#define ISCSI_IPV6_ROUTER_AUTOCFG_DISABLE	0x02370 371#define ISCSI_IFACE_TYPE_IPV4		0x01372#define ISCSI_IFACE_TYPE_IPV6		0x02373 374#define ISCSI_MAX_VLAN_ID		4095375#define ISCSI_MAX_VLAN_PRIORITY		7376 377/* iscsi vlan enable/disabled setting */378#define ISCSI_VLAN_DISABLE	0x01379#define ISCSI_VLAN_ENABLE	0x02380 381/* iscsi generic enable/disabled setting for various features */382#define ISCSI_NET_PARAM_DISABLE		0x01383#define ISCSI_NET_PARAM_ENABLE		0x02384 385/* iSCSI network params */386enum iscsi_net_param {387	ISCSI_NET_PARAM_IPV4_ADDR		= 1,388	ISCSI_NET_PARAM_IPV4_SUBNET,389	ISCSI_NET_PARAM_IPV4_GW,390	ISCSI_NET_PARAM_IPV4_BOOTPROTO,391	ISCSI_NET_PARAM_MAC,392	ISCSI_NET_PARAM_IPV6_LINKLOCAL,393	ISCSI_NET_PARAM_IPV6_ADDR,394	ISCSI_NET_PARAM_IPV6_ROUTER,395	ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG,396	ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,397	ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,398	ISCSI_NET_PARAM_IFACE_ENABLE,399	ISCSI_NET_PARAM_VLAN_ID,400	ISCSI_NET_PARAM_VLAN_PRIORITY,401	ISCSI_NET_PARAM_VLAN_ENABLED,402	ISCSI_NET_PARAM_VLAN_TAG,403	ISCSI_NET_PARAM_IFACE_TYPE,404	ISCSI_NET_PARAM_IFACE_NAME,405	ISCSI_NET_PARAM_MTU,406	ISCSI_NET_PARAM_PORT,407	ISCSI_NET_PARAM_IPADDR_STATE,408	ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,409	ISCSI_NET_PARAM_IPV6_ROUTER_STATE,410	ISCSI_NET_PARAM_DELAYED_ACK_EN,411	ISCSI_NET_PARAM_TCP_NAGLE_DISABLE,412	ISCSI_NET_PARAM_TCP_WSF_DISABLE,413	ISCSI_NET_PARAM_TCP_WSF,414	ISCSI_NET_PARAM_TCP_TIMER_SCALE,415	ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,416	ISCSI_NET_PARAM_CACHE_ID,417	ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,418	ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,419	ISCSI_NET_PARAM_IPV4_TOS_EN,420	ISCSI_NET_PARAM_IPV4_TOS,421	ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,422	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,423	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,424	ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,425	ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,426	ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,427	ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,428	ISCSI_NET_PARAM_IPV4_FRAGMENT_DISABLE,429	ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,430	ISCSI_NET_PARAM_IPV4_TTL,431	ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,432	ISCSI_NET_PARAM_IPV6_MLD_EN,433	ISCSI_NET_PARAM_IPV6_FLOW_LABEL,434	ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,435	ISCSI_NET_PARAM_IPV6_HOP_LIMIT,436	ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,437	ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,438	ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,439	ISCSI_NET_PARAM_IPV6_DUP_ADDR_DETECT_CNT,440	ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,441	ISCSI_NET_PARAM_REDIRECT_EN,442};443 444enum iscsi_ipaddress_state {445	ISCSI_IPDDRESS_STATE_UNCONFIGURED,446	ISCSI_IPDDRESS_STATE_ACQUIRING,447	ISCSI_IPDDRESS_STATE_TENTATIVE,448	ISCSI_IPDDRESS_STATE_VALID,449	ISCSI_IPDDRESS_STATE_DISABLING,450	ISCSI_IPDDRESS_STATE_INVALID,451	ISCSI_IPDDRESS_STATE_DEPRECATED,452};453 454enum iscsi_router_state {455	ISCSI_ROUTER_STATE_UNKNOWN,456	ISCSI_ROUTER_STATE_ADVERTISED,457	ISCSI_ROUTER_STATE_MANUAL,458	ISCSI_ROUTER_STATE_STALE,459};460 461/* iSCSI specific settings params for iface */462enum iscsi_iface_param {463	ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,464	ISCSI_IFACE_PARAM_HDRDGST_EN,465	ISCSI_IFACE_PARAM_DATADGST_EN,466	ISCSI_IFACE_PARAM_IMM_DATA_EN,467	ISCSI_IFACE_PARAM_INITIAL_R2T_EN,468	ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,469	ISCSI_IFACE_PARAM_PDU_INORDER_EN,470	ISCSI_IFACE_PARAM_ERL,471	ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,472	ISCSI_IFACE_PARAM_FIRST_BURST,473	ISCSI_IFACE_PARAM_MAX_R2T,474	ISCSI_IFACE_PARAM_MAX_BURST,475	ISCSI_IFACE_PARAM_CHAP_AUTH_EN,476	ISCSI_IFACE_PARAM_BIDI_CHAP_EN,477	ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,478	ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,479	ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,480	ISCSI_IFACE_PARAM_INITIATOR_NAME,481};482 483enum iscsi_conn_state {484	ISCSI_CONN_STATE_FREE,485	ISCSI_CONN_STATE_XPT_WAIT,486	ISCSI_CONN_STATE_IN_LOGIN,487	ISCSI_CONN_STATE_LOGGED_IN,488	ISCSI_CONN_STATE_IN_LOGOUT,489	ISCSI_CONN_STATE_LOGOUT_REQUESTED,490	ISCSI_CONN_STATE_CLEANUP_WAIT,491};492 493/*494 * Common error codes495 */496enum iscsi_err {497	ISCSI_OK			= 0,498 499	ISCSI_ERR_DATASN		= ISCSI_ERR_BASE + 1,500	ISCSI_ERR_DATA_OFFSET		= ISCSI_ERR_BASE + 2,501	ISCSI_ERR_MAX_CMDSN		= ISCSI_ERR_BASE + 3,502	ISCSI_ERR_EXP_CMDSN		= ISCSI_ERR_BASE + 4,503	ISCSI_ERR_BAD_OPCODE		= ISCSI_ERR_BASE + 5,504	ISCSI_ERR_DATALEN		= ISCSI_ERR_BASE + 6,505	ISCSI_ERR_AHSLEN		= ISCSI_ERR_BASE + 7,506	ISCSI_ERR_PROTO			= ISCSI_ERR_BASE + 8,507	ISCSI_ERR_LUN			= ISCSI_ERR_BASE + 9,508	ISCSI_ERR_BAD_ITT		= ISCSI_ERR_BASE + 10,509	ISCSI_ERR_CONN_FAILED		= ISCSI_ERR_BASE + 11,510	ISCSI_ERR_R2TSN			= ISCSI_ERR_BASE + 12,511	ISCSI_ERR_SESSION_FAILED	= ISCSI_ERR_BASE + 13,512	ISCSI_ERR_HDR_DGST		= ISCSI_ERR_BASE + 14,513	ISCSI_ERR_DATA_DGST		= ISCSI_ERR_BASE + 15,514	ISCSI_ERR_PARAM_NOT_FOUND	= ISCSI_ERR_BASE + 16,515	ISCSI_ERR_NO_SCSI_CMD		= ISCSI_ERR_BASE + 17,516	ISCSI_ERR_INVALID_HOST		= ISCSI_ERR_BASE + 18,517	ISCSI_ERR_XMIT_FAILED		= ISCSI_ERR_BASE + 19,518	ISCSI_ERR_TCP_CONN_CLOSE	= ISCSI_ERR_BASE + 20,519	ISCSI_ERR_SCSI_EH_SESSION_RST	= ISCSI_ERR_BASE + 21,520	ISCSI_ERR_NOP_TIMEDOUT		= ISCSI_ERR_BASE + 22,521};522 523/*524 * iSCSI Parameters (RFC3720)525 */526enum iscsi_param {527	/* passed in using netlink set param */528	ISCSI_PARAM_MAX_RECV_DLENGTH,529	ISCSI_PARAM_MAX_XMIT_DLENGTH,530	ISCSI_PARAM_HDRDGST_EN,531	ISCSI_PARAM_DATADGST_EN,532	ISCSI_PARAM_INITIAL_R2T_EN,533	ISCSI_PARAM_MAX_R2T,534	ISCSI_PARAM_IMM_DATA_EN,535	ISCSI_PARAM_FIRST_BURST,536	ISCSI_PARAM_MAX_BURST,537	ISCSI_PARAM_PDU_INORDER_EN,538	ISCSI_PARAM_DATASEQ_INORDER_EN,539	ISCSI_PARAM_ERL,540	ISCSI_PARAM_IFMARKER_EN,541	ISCSI_PARAM_OFMARKER_EN,542	ISCSI_PARAM_EXP_STATSN,543	ISCSI_PARAM_TARGET_NAME,544	ISCSI_PARAM_TPGT,545	ISCSI_PARAM_PERSISTENT_ADDRESS,546	ISCSI_PARAM_PERSISTENT_PORT,547	ISCSI_PARAM_SESS_RECOVERY_TMO,548 549	/* passed in through bind conn using transport_fd */550	ISCSI_PARAM_CONN_PORT,551	ISCSI_PARAM_CONN_ADDRESS,552 553	ISCSI_PARAM_USERNAME,554	ISCSI_PARAM_USERNAME_IN,555	ISCSI_PARAM_PASSWORD,556	ISCSI_PARAM_PASSWORD_IN,557 558	ISCSI_PARAM_FAST_ABORT,559	ISCSI_PARAM_ABORT_TMO,560	ISCSI_PARAM_LU_RESET_TMO,561	ISCSI_PARAM_HOST_RESET_TMO,562 563	ISCSI_PARAM_PING_TMO,564	ISCSI_PARAM_RECV_TMO,565 566	ISCSI_PARAM_IFACE_NAME,567	ISCSI_PARAM_ISID,568	ISCSI_PARAM_INITIATOR_NAME,569 570	ISCSI_PARAM_TGT_RESET_TMO,571	ISCSI_PARAM_TARGET_ALIAS,572 573	ISCSI_PARAM_CHAP_IN_IDX,574	ISCSI_PARAM_CHAP_OUT_IDX,575 576	ISCSI_PARAM_BOOT_ROOT,577	ISCSI_PARAM_BOOT_NIC,578	ISCSI_PARAM_BOOT_TARGET,579 580	ISCSI_PARAM_AUTO_SND_TGT_DISABLE,581	ISCSI_PARAM_DISCOVERY_SESS,582	ISCSI_PARAM_PORTAL_TYPE,583	ISCSI_PARAM_CHAP_AUTH_EN,584	ISCSI_PARAM_DISCOVERY_LOGOUT_EN,585	ISCSI_PARAM_BIDI_CHAP_EN,586	ISCSI_PARAM_DISCOVERY_AUTH_OPTIONAL,587 588	ISCSI_PARAM_DEF_TIME2WAIT,589	ISCSI_PARAM_DEF_TIME2RETAIN,590	ISCSI_PARAM_MAX_SEGMENT_SIZE,591	ISCSI_PARAM_STATSN,592	ISCSI_PARAM_KEEPALIVE_TMO,593	ISCSI_PARAM_LOCAL_PORT,594	ISCSI_PARAM_TSID,595	ISCSI_PARAM_DEF_TASKMGMT_TMO,596 597	ISCSI_PARAM_TCP_TIMESTAMP_STAT,598	ISCSI_PARAM_TCP_WSF_DISABLE,599	ISCSI_PARAM_TCP_NAGLE_DISABLE,600	ISCSI_PARAM_TCP_TIMER_SCALE,601	ISCSI_PARAM_TCP_TIMESTAMP_EN,602	ISCSI_PARAM_TCP_XMIT_WSF,603	ISCSI_PARAM_TCP_RECV_WSF,604	ISCSI_PARAM_IP_FRAGMENT_DISABLE,605	ISCSI_PARAM_IPV4_TOS,606	ISCSI_PARAM_IPV6_TC,607	ISCSI_PARAM_IPV6_FLOW_LABEL,608	ISCSI_PARAM_IS_FW_ASSIGNED_IPV6,609 610	ISCSI_PARAM_DISCOVERY_PARENT_IDX,611	ISCSI_PARAM_DISCOVERY_PARENT_TYPE,612	ISCSI_PARAM_LOCAL_IPADDR,613	/* must always be last */614	ISCSI_PARAM_MAX,615};616 617/* iSCSI HBA params */618enum iscsi_host_param {619	ISCSI_HOST_PARAM_HWADDRESS,620	ISCSI_HOST_PARAM_INITIATOR_NAME,621	ISCSI_HOST_PARAM_NETDEV_NAME,622	ISCSI_HOST_PARAM_IPADDRESS,623	ISCSI_HOST_PARAM_PORT_STATE,624	ISCSI_HOST_PARAM_PORT_SPEED,625	ISCSI_HOST_PARAM_MAX,626};627 628/* portal type */629#define PORTAL_TYPE_IPV4	"ipv4"630#define PORTAL_TYPE_IPV6	"ipv6"631 632/* iSCSI Flash Target params */633enum iscsi_flashnode_param {634	ISCSI_FLASHNODE_IS_FW_ASSIGNED_IPV6,635	ISCSI_FLASHNODE_PORTAL_TYPE,636	ISCSI_FLASHNODE_AUTO_SND_TGT_DISABLE,637	ISCSI_FLASHNODE_DISCOVERY_SESS,638	ISCSI_FLASHNODE_ENTRY_EN,639	ISCSI_FLASHNODE_HDR_DGST_EN,640	ISCSI_FLASHNODE_DATA_DGST_EN,641	ISCSI_FLASHNODE_IMM_DATA_EN,642	ISCSI_FLASHNODE_INITIAL_R2T_EN,643	ISCSI_FLASHNODE_DATASEQ_INORDER,644	ISCSI_FLASHNODE_PDU_INORDER,645	ISCSI_FLASHNODE_CHAP_AUTH_EN,646	ISCSI_FLASHNODE_SNACK_REQ_EN,647	ISCSI_FLASHNODE_DISCOVERY_LOGOUT_EN,648	ISCSI_FLASHNODE_BIDI_CHAP_EN,649	/* make authentication for discovery sessions optional */650	ISCSI_FLASHNODE_DISCOVERY_AUTH_OPTIONAL,651	ISCSI_FLASHNODE_ERL,652	ISCSI_FLASHNODE_TCP_TIMESTAMP_STAT,653	ISCSI_FLASHNODE_TCP_NAGLE_DISABLE,654	ISCSI_FLASHNODE_TCP_WSF_DISABLE,655	ISCSI_FLASHNODE_TCP_TIMER_SCALE,656	ISCSI_FLASHNODE_TCP_TIMESTAMP_EN,657	ISCSI_FLASHNODE_IP_FRAG_DISABLE,658	ISCSI_FLASHNODE_MAX_RECV_DLENGTH,659	ISCSI_FLASHNODE_MAX_XMIT_DLENGTH,660	ISCSI_FLASHNODE_FIRST_BURST,661	ISCSI_FLASHNODE_DEF_TIME2WAIT,662	ISCSI_FLASHNODE_DEF_TIME2RETAIN,663	ISCSI_FLASHNODE_MAX_R2T,664	ISCSI_FLASHNODE_KEEPALIVE_TMO,665	ISCSI_FLASHNODE_ISID,666	ISCSI_FLASHNODE_TSID,667	ISCSI_FLASHNODE_PORT,668	ISCSI_FLASHNODE_MAX_BURST,669	ISCSI_FLASHNODE_DEF_TASKMGMT_TMO,670	ISCSI_FLASHNODE_IPADDR,671	ISCSI_FLASHNODE_ALIAS,672	ISCSI_FLASHNODE_REDIRECT_IPADDR,673	ISCSI_FLASHNODE_MAX_SEGMENT_SIZE,674	ISCSI_FLASHNODE_LOCAL_PORT,675	ISCSI_FLASHNODE_IPV4_TOS,676	ISCSI_FLASHNODE_IPV6_TC,677	ISCSI_FLASHNODE_IPV6_FLOW_LABEL,678	ISCSI_FLASHNODE_NAME,679	ISCSI_FLASHNODE_TPGT,680	ISCSI_FLASHNODE_LINK_LOCAL_IPV6,681	ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX,682	ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE,683	ISCSI_FLASHNODE_TCP_XMIT_WSF,684	ISCSI_FLASHNODE_TCP_RECV_WSF,685	ISCSI_FLASHNODE_CHAP_IN_IDX,686	ISCSI_FLASHNODE_CHAP_OUT_IDX,687	ISCSI_FLASHNODE_USERNAME,688	ISCSI_FLASHNODE_USERNAME_IN,689	ISCSI_FLASHNODE_PASSWORD,690	ISCSI_FLASHNODE_PASSWORD_IN,691	ISCSI_FLASHNODE_STATSN,692	ISCSI_FLASHNODE_EXP_STATSN,693	ISCSI_FLASHNODE_IS_BOOT_TGT,694 695	ISCSI_FLASHNODE_MAX,696};697 698struct iscsi_flashnode_param_info {699	uint32_t len;		/* Actual length of the param */700	uint16_t param;		/* iscsi param value */701	uint8_t value[];	/* length sized value follows */702} __packed;703 704enum iscsi_discovery_parent_type {705	ISCSI_DISC_PARENT_UNKNOWN	= 0x1,706	ISCSI_DISC_PARENT_SENDTGT	= 0x2,707	ISCSI_DISC_PARENT_ISNS		= 0x3,708};709 710/* iSCSI port Speed */711enum iscsi_port_speed {712	ISCSI_PORT_SPEED_UNKNOWN	= 0x1,713	ISCSI_PORT_SPEED_10MBPS		= 0x2,714	ISCSI_PORT_SPEED_100MBPS	= 0x4,715	ISCSI_PORT_SPEED_1GBPS		= 0x8,716	ISCSI_PORT_SPEED_10GBPS		= 0x10,717	ISCSI_PORT_SPEED_25GBPS         = 0x20,718	ISCSI_PORT_SPEED_40GBPS         = 0x40,719};720 721/* iSCSI port state */722enum iscsi_port_state {723	ISCSI_PORT_STATE_DOWN		= 0x1,724	ISCSI_PORT_STATE_UP		= 0x2,725};726 727/* iSCSI PING status/error code */728enum iscsi_ping_status_code {729	ISCSI_PING_SUCCESS			= 0,730	ISCSI_PING_FW_DISABLED			= 0x1,731	ISCSI_PING_IPADDR_INVALID		= 0x2,732	ISCSI_PING_LINKLOCAL_IPV6_ADDR_INVALID	= 0x3,733	ISCSI_PING_TIMEOUT			= 0x4,734	ISCSI_PING_INVALID_DEST_ADDR		= 0x5,735	ISCSI_PING_OVERSIZE_PACKET		= 0x6,736	ISCSI_PING_ICMP_ERROR			= 0x7,737	ISCSI_PING_MAX_REQ_EXCEEDED		= 0x8,738	ISCSI_PING_NO_ARP_RECEIVED		= 0x9,739};740 741#define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)742#define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)743 744/*745 * These flags presents iSCSI Data-Path capabilities.746 */747#define CAP_RECOVERY_L0		0x1748#define CAP_RECOVERY_L1		0x2749#define CAP_RECOVERY_L2		0x4750#define CAP_MULTI_R2T		0x8751#define CAP_HDRDGST		0x10752#define CAP_DATADGST		0x20753#define CAP_MULTI_CONN		0x40754#define CAP_TEXT_NEGO		0x80755#define CAP_MARKERS		0x100756#define CAP_FW_DB		0x200757#define CAP_SENDTARGETS_OFFLOAD	0x400	/* offload discovery process */758#define CAP_DATA_PATH_OFFLOAD	0x800	/* offload entire IO path */759#define CAP_DIGEST_OFFLOAD	0x1000	/* offload hdr and data digests */760#define CAP_PADDING_OFFLOAD	0x2000	/* offload padding insertion, removal,761					 and verification */762#define CAP_LOGIN_OFFLOAD	0x4000  /* offload session login */763 764/*765 * These flags describes reason of stop_conn() call766 */767#define STOP_CONN_TERM		0x1768#define STOP_CONN_SUSPEND	0x2769#define STOP_CONN_RECOVER	0x3770 771#define ISCSI_STATS_CUSTOM_MAX		32772#define ISCSI_STATS_CUSTOM_DESC_MAX	64773struct iscsi_stats_custom {774	char desc[ISCSI_STATS_CUSTOM_DESC_MAX];775	uint64_t value;776};777 778/*779 * struct iscsi_stats - iSCSI Statistics (iSCSI MIB)780 *781 * Note: this structure contains counters collected on per-connection basis.782 */783struct iscsi_stats {784	/* octets */785	uint64_t txdata_octets;786	uint64_t rxdata_octets;787 788	/* xmit pdus */789	uint32_t noptx_pdus;790	uint32_t scsicmd_pdus;791	uint32_t tmfcmd_pdus;792	uint32_t login_pdus;793	uint32_t text_pdus;794	uint32_t dataout_pdus;795	uint32_t logout_pdus;796	uint32_t snack_pdus;797 798	/* recv pdus */799	uint32_t noprx_pdus;800	uint32_t scsirsp_pdus;801	uint32_t tmfrsp_pdus;802	uint32_t textrsp_pdus;803	uint32_t datain_pdus;804	uint32_t logoutrsp_pdus;805	uint32_t r2t_pdus;806	uint32_t async_pdus;807	uint32_t rjt_pdus;808 809	/* errors */810	uint32_t digest_err;811	uint32_t timeout_err;812 813	/*814	 * iSCSI Custom Statistics support, i.e. Transport could815	 * extend existing MIB statistics with its own specific statistics816	 * up to ISCSI_STATS_CUSTOM_MAX817	 */818	uint32_t custom_length;819	struct iscsi_stats_custom custom[]820		__attribute__ ((aligned (sizeof(uint64_t))));821};822 823enum chap_type_e {824	CHAP_TYPE_OUT,825	CHAP_TYPE_IN,826};827 828enum iscsi_chap_param {829	ISCSI_CHAP_PARAM_INDEX,830	ISCSI_CHAP_PARAM_CHAP_TYPE,831	ISCSI_CHAP_PARAM_USERNAME,832	ISCSI_CHAP_PARAM_PASSWORD,833	ISCSI_CHAP_PARAM_PASSWORD_LEN834};835 836#define ISCSI_CHAP_AUTH_NAME_MAX_LEN	256837#define ISCSI_CHAP_AUTH_SECRET_MAX_LEN	256838struct iscsi_chap_rec {839	uint16_t chap_tbl_idx;840	enum chap_type_e chap_type;841	char username[ISCSI_CHAP_AUTH_NAME_MAX_LEN];842	uint8_t password[ISCSI_CHAP_AUTH_SECRET_MAX_LEN];843	uint8_t password_length;844};845 846#define ISCSI_HOST_STATS_CUSTOM_MAX             32847#define ISCSI_HOST_STATS_CUSTOM_DESC_MAX        64848struct iscsi_host_stats_custom {849	char desc[ISCSI_HOST_STATS_CUSTOM_DESC_MAX];850	uint64_t value;851};852 853/* struct iscsi_offload_host_stats: Host statistics,854 * Include statistics for MAC, IP, TCP & iSCSI.855 */856struct iscsi_offload_host_stats {857	/* MAC */858	uint64_t mactx_frames;859	uint64_t mactx_bytes;860	uint64_t mactx_multicast_frames;861	uint64_t mactx_broadcast_frames;862	uint64_t mactx_pause_frames;863	uint64_t mactx_control_frames;864	uint64_t mactx_deferral;865	uint64_t mactx_excess_deferral;866	uint64_t mactx_late_collision;867	uint64_t mactx_abort;868	uint64_t mactx_single_collision;869	uint64_t mactx_multiple_collision;870	uint64_t mactx_collision;871	uint64_t mactx_frames_dropped;872	uint64_t mactx_jumbo_frames;873	uint64_t macrx_frames;874	uint64_t macrx_bytes;875	uint64_t macrx_unknown_control_frames;876	uint64_t macrx_pause_frames;877	uint64_t macrx_control_frames;878	uint64_t macrx_dribble;879	uint64_t macrx_frame_length_error;880	uint64_t macrx_jabber;881	uint64_t macrx_carrier_sense_error;882	uint64_t macrx_frame_discarded;883	uint64_t macrx_frames_dropped;884	uint64_t mac_crc_error;885	uint64_t mac_encoding_error;886	uint64_t macrx_length_error_large;887	uint64_t macrx_length_error_small;888	uint64_t macrx_multicast_frames;889	uint64_t macrx_broadcast_frames;890	/* IP */891	uint64_t iptx_packets;892	uint64_t iptx_bytes;893	uint64_t iptx_fragments;894	uint64_t iprx_packets;895	uint64_t iprx_bytes;896	uint64_t iprx_fragments;897	uint64_t ip_datagram_reassembly;898	uint64_t ip_invalid_address_error;899	uint64_t ip_error_packets;900	uint64_t ip_fragrx_overlap;901	uint64_t ip_fragrx_outoforder;902	uint64_t ip_datagram_reassembly_timeout;903	uint64_t ipv6tx_packets;904	uint64_t ipv6tx_bytes;905	uint64_t ipv6tx_fragments;906	uint64_t ipv6rx_packets;907	uint64_t ipv6rx_bytes;908	uint64_t ipv6rx_fragments;909	uint64_t ipv6_datagram_reassembly;910	uint64_t ipv6_invalid_address_error;911	uint64_t ipv6_error_packets;912	uint64_t ipv6_fragrx_overlap;913	uint64_t ipv6_fragrx_outoforder;914	uint64_t ipv6_datagram_reassembly_timeout;915	/* TCP */916	uint64_t tcptx_segments;917	uint64_t tcptx_bytes;918	uint64_t tcprx_segments;919	uint64_t tcprx_byte;920	uint64_t tcp_duplicate_ack_retx;921	uint64_t tcp_retx_timer_expired;922	uint64_t tcprx_duplicate_ack;923	uint64_t tcprx_pure_ackr;924	uint64_t tcptx_delayed_ack;925	uint64_t tcptx_pure_ack;926	uint64_t tcprx_segment_error;927	uint64_t tcprx_segment_outoforder;928	uint64_t tcprx_window_probe;929	uint64_t tcprx_window_update;930	uint64_t tcptx_window_probe_persist;931	/* ECC */932	uint64_t ecc_error_correction;933	/* iSCSI */934	uint64_t iscsi_pdu_tx;935	uint64_t iscsi_data_bytes_tx;936	uint64_t iscsi_pdu_rx;937	uint64_t iscsi_data_bytes_rx;938	uint64_t iscsi_io_completed;939	uint64_t iscsi_unexpected_io_rx;940	uint64_t iscsi_format_error;941	uint64_t iscsi_hdr_digest_error;942	uint64_t iscsi_data_digest_error;943	uint64_t iscsi_sequence_error;944	/*945	 * iSCSI Custom Host Statistics support, i.e. Transport could946	 * extend existing host statistics with its own specific statistics947	 * up to ISCSI_HOST_STATS_CUSTOM_MAX948	 */949	uint32_t custom_length;950	struct iscsi_host_stats_custom custom[]951		__aligned(sizeof(uint64_t));952};953 954#endif955