/*
 * iSNS protocol data types
 *
 * Copyright (C) 2006 FUJITA Tomonori <tomof@acm.org>
 * Copyright (C) 2007 - 2018 Vladislav Bolkhovitin
 * Copyright (C) 2007 - 2018 Western Digital Corporation
 *
 * 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 2 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.
 */

#ifndef ISNS_PROTO_H
#define ISNS_PROTO_H

#define ISNS_PORT	3205
#define ISNS_ALIGN	4

struct isns_hdr {
	uint16_t version;
	uint16_t function;
	uint16_t length;
	uint16_t flags;
	uint16_t transaction;
	uint16_t sequence;
	uint32_t pdu[0];
} __attribute__ ((packed));

struct isns_tlv {
	uint32_t tag;
	uint32_t length;
	uint32_t value[];
} __attribute__ ((packed));

/* Commands and responses (4.1.3) */
#define ISNS_FUNC_DEV_ATTR_REG			0x0001
#define ISNS_FUNC_DEV_ATTR_QRY			0x0002
#define ISNS_FUNC_DEV_GET_NEXT			0x0003
#define ISNS_FUNC_DEV_DEREG			0x0004
#define ISNS_FUNC_SCN_REG			0x0005
#define ISNS_FUNC_SCN_DEREG			0x0006
#define ISNS_FUNC_SCN_EVENT			0x0007
#define ISNS_FUNC_SCN				0x0008
#define ISNS_FUNC_DD_REG			0x0009
#define ISNS_FUNC_DD_DEREG			0x000a
#define ISNS_FUNC_DDS_REG			0x000b
#define ISNS_FUNC_DDS_DEREG			0x000c
#define ISNS_FUNC_ESI				0x000d
#define ISNS_FUNC_HEARTBEAT			0x000e

#define ISNS_FUNC_DEV_ATTR_REG_RSP		0x8001
#define ISNS_FUNC_DEV_ATTR_QRY_RSP		0x8002
#define ISNS_FUNC_DEV_GET_NEXT_RSP		0x8003
#define ISNS_FUNC_DEV_DEREG_RSP			0x8004
#define ISNS_FUNC_SCN_REG_RSP			0x8005
#define ISNS_FUNC_SCN_DEREG_RSP			0x8006
#define ISNS_FUNC_SCN_EVENT_RSP			0x8007
#define ISNS_FUNC_SCN_RSP			0x8008
#define ISNS_FUNC_DD_REG_RSP			0x8009
#define ISNS_FUNC_DD_DEREG_RSP			0x800a
#define ISNS_FUNC_DDS_REG_RSP			0x800b
#define ISNS_FUNC_DDS_DEREG_RSP			0x800c
#define ISNS_FUNC_ESI_RSP			0x800d

/* iSNSP flags (5.1.4) */
#define ISNS_FLAG_CLIENT			(1U << 15)
#define ISNS_FLAG_SERVER			(1U << 14)
#define ISNS_FLAG_AUTH				(1U << 13)
#define ISNS_FLAG_REPLACE			(1U << 12)
#define ISNS_FLAG_LAST_PDU			(1U << 11)
#define ISNS_FLAG_FIRST_PDU			(1U << 10)

/* Response Status Codes (5.4) */
#define ISNS_STATUS_SUCCESS			0
#define ISNS_STATUS_UNKNOWN_ERROR		1
#define ISNS_STATUS_FORMAT_ERROR		2
#define ISNS_STATUS_INVALID_REGISTRATION	3
#define ISNS_STATUS_RESERVED			4
#define ISNS_STATUS_INVALID_QUERY		5
#define ISNS_STATUS_SOURCE_UNKNOWN		6
#define ISNS_STATUS_SOURCE_ABSENT		7
#define ISNS_STATUS_SOURCE_UNAUTHORIZED		8
#define ISNS_STATUS_NO_SUCH_ENTRY		9
#define ISNS_STATUS_VERSION_NOT_SUPPORTED	10
#define ISNS_STATUS_INTERNAL_ERROR		11
#define ISNS_STATUS_BUSY			12
#define ISNS_STATUS_OPTION_NOT_UNDERSTOOD	13
#define ISNS_STATUS_INVALID_UPDATE		14
#define ISNS_STATUS_MESSAGE_NOT_SUPPORTED	15
#define ISNS_STATUS_SCN_EVENT_REJECTED		16
#define ISNS_STATUS_SCN_REGISTRATION_REJECTED	17
#define ISNS_STATUS_ATTRIBUTE_NOT_IMPLEMENTED	18
#define ISNS_STATUS_FC_DOMAIN_ID_NOT_AVAILABLE	19
#define ISNS_STATUS_FC_DOMAIN_ID_NOT_ALLOCATED	20
#define ISNS_STATUS_ESI_NOT_AVAILABLE		21
#define ISNS_STATUS_INVALIDE_DEREGISTRATION	22
#define ISNS_STATUS_REGISTRATION_NOT_SUPPORTED	23

/* Node type (5.4.2) */
#define ISNS_NODE_CONTROL			(1U << 2)
#define ISNS_NODE_INITIATOR			(1U << 1)
#define ISNS_NODE_TARGET			(1U << 0)

/* Attributes (6.1) */
#define ISNS_ATTR_DELIMITER			0
#define ISNS_ATTR_ENTITY_IDENTIFIER		1
#define ISNS_ATTR_ENTITY_PROTOCOL		2
#define ISNS_ATTR_MANAGEMENT_IP_ADDRESS		3
#define ISNS_ATTR_TIMESTAMP			4
#define ISNS_ATTR_PROTOCOL_VERSION_RANGE	5
#define ISNS_ATTR_REGISTRATION_PERIOD		6
#define ISNS_ATTR_ENTITY_INDEX			7
#define ISNS_ATTR_ENTITY_NEXT_INDEX		8
#define ISNS_ATTR_ISAKMP_PHASE1			11
#define ISNS_ATTR_CERTIFICATE			12
#define ISNS_ATTR_PORTAL_IP_ADDRESS		16
#define ISNS_ATTR_PORTAL_PORT			17
#define ISNS_ATTR_PORTAL_SYMBOLIC_NAME		18
#define ISNS_ATTR_ESI_INTERVAL			19
#define ISNS_ATTR_ESI_PORT			20
#define ISNS_ATTR_PORTAL_INDEX			22
#define ISNS_ATTR_SCN_PORT			23
#define ISNS_ATTR_PORTAL_NEXT_INDEX		24
#define ISNS_ATTR_PORTAL_SECURITY_BITMAP	27
#define ISNS_ATTR_PORTAL_ISAKMP_PHASE1		28
#define ISNS_ATTR_PORTAL_ISAKMP_PHASE2		29
#define ISNS_ATTR_PORTAL_CERTIFICATE		31
#define ISNS_ATTR_ISCSI_NAME			32
#define ISNS_ATTR_ISCSI_NODE_TYPE		33
#define ISNS_ATTR_ISCSI_ALIAS			34
#define ISNS_ATTR_ISCSI_SCN_BITMAP		35
#define ISNS_ATTR_ISCSI_NODE_INDEX		36
#define ISNS_ATTR_WWNN_TOKEN			37
#define ISNS_ATTR_ISCSI_NODE_NEXT_INDEX		38
#define ISNS_ATTR_ISCSI_AUTHMETHOD		42
#define ISNS_ATTR_PG_ISCSI_NAME			48
#define ISNS_ATTR_PG_PORTAL_IP_ADDRESS		49
#define ISNS_ATTR_PG_PORTAL_PORT		50
#define ISNS_ATTR_PG_TAG			51
#define ISNS_ATTR_PG_INDEX			52
#define ISNS_ATTR_PG_NEXT_INDEX			53
#define ISNS_ATTR_FC_PORT_NAME_WWPN		64
#define ISNS_ATTR_PORT_ID			65
#define ISNS_ATTR_PORT_TYPE			66
#define ISNS_ATTR_SYMBOLIC_PORT_NAME		67
#define ISNS_ATTR_FABRIC_PORT_NAME		68
#define ISNS_ATTR_HARD_ADDRESS			69
#define ISNS_ATTR_PORT_IP_ADDRESS		70
#define ISNS_ATTR_CLASS_OF_SERVICE		71
#define ISNS_ATTR_FC4_TYPES			72
#define ISNS_ATTR_FC4_DESCRIPOTR		73
#define ISNS_ATTR_FC4_FEATURES			74
#define ISNS_ATTR_IFCP_SCN_BITMAP		75
#define ISNS_ATTR_PORT_ROLE			76
#define ISNS_ATTR_PERMANENT_PORT_NAME		77
#define ISNS_ATTR_FC4_TYPE_CODE			95
#define ISNS_ATTR_FC_NODE_NAME_WWNN		96
#define ISNS_ATTR_SYMBOLIC_NODE_NAME		97
#define ISNS_ATTR_NODE_IP_ADDRESS		98
#define ISNS_ATTR_NODE_IPA			99
#define ISNS_ATTR_PORXY_ISCSI_NAME		101
#define ISNS_ATTR_SWITCH_NAME			128
#define ISNS_ATTR_PREFERRED_ID			129
#define ISNS_ATTR_ASSIGNED_ID			130
#define ISNS_ATTR_VIRTUAL_FABRIC_ID		131
#define ISNS_ATTR_ISNS_SERVER_VENDOR_OUI	256
#define ISNS_ATTR_DD_SET_ID			2049
#define ISNS_ATTR_DD_SET_SYM_NAME		2050
#define ISNS_ATTR_DD_SET_STATUS			2051
#define ISNS_ATTR_DD_SET_NEXT_ID		2052
#define ISNS_ATTR_DD_ID				2065
#define ISNS_ATTR_DD_SYMBOLIC_NAME		2066
#define ISNS_ATTR_DD_MEMBER_ISCSI_INDEX		2067
#define ISNS_ATTR_DD_MEMBER_ISCSI_NAME		2068
#define ISNS_ATTR_DD_MEMBER_FC_PORT_NAME	2069
#define ISNS_ATTR_DD_MEMBER_PORTAL_INDEX	2070
#define ISNS_ATTR_DD_MEMBER_IP_ADDR		2071
#define ISNS_ATTR_DD_MEMBER_TCP_UDP		2072
#define ISNS_ATTR_DD_FEATURES			2078
#define ISNS_ATTR_DD_ID_NEXT_ID			2079

/* SCN flags (6.4.4) */
#define ISNS_SCN_FLAG_INITIATOR			(1U << 24)
#define ISNS_SCN_FLAG_TARGET			(1U << 25)
#define ISNS_SCN_FLAG_MANAGEMENT		(1U << 26)
#define ISNS_SCN_FLAG_OBJECT_REMOVE		(1U << 27)
#define ISNS_SCN_FLAG_OBJECT_ADDED		(1U << 28)
#define ISNS_SCN_FLAG_OBJECT_UPDATED		(1U << 29)
#define ISNS_SCN_FLAG_DD_REMOVED		(1U << 30)
#define ISNS_SCN_FLAG_DD_ADDED			(1U << 31)
#endif
