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