1*a6d42e7dSPeter Dunlap /*
2*a6d42e7dSPeter Dunlap  * CDDL HEADER START
3*a6d42e7dSPeter Dunlap  *
4*a6d42e7dSPeter Dunlap  * The contents of this file are subject to the terms of the
5*a6d42e7dSPeter Dunlap  * Common Development and Distribution License (the "License").
6*a6d42e7dSPeter Dunlap  * You may not use this file except in compliance with the License.
7*a6d42e7dSPeter Dunlap  *
8*a6d42e7dSPeter Dunlap  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*a6d42e7dSPeter Dunlap  * or http://www.opensolaris.org/os/licensing.
10*a6d42e7dSPeter Dunlap  * See the License for the specific language governing permissions
11*a6d42e7dSPeter Dunlap  * and limitations under the License.
12*a6d42e7dSPeter Dunlap  *
13*a6d42e7dSPeter Dunlap  * When distributing Covered Code, include this CDDL HEADER in each
14*a6d42e7dSPeter Dunlap  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*a6d42e7dSPeter Dunlap  * If applicable, add the following below this CDDL HEADER, with the
16*a6d42e7dSPeter Dunlap  * fields enclosed by brackets "[]" replaced with your own identifying
17*a6d42e7dSPeter Dunlap  * information: Portions Copyright [yyyy] [name of copyright owner]
18*a6d42e7dSPeter Dunlap  *
19*a6d42e7dSPeter Dunlap  * CDDL HEADER END
20*a6d42e7dSPeter Dunlap  */
21*a6d42e7dSPeter Dunlap 
22*a6d42e7dSPeter Dunlap /*
23*a6d42e7dSPeter Dunlap  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24*a6d42e7dSPeter Dunlap  * Use is subject to license terms.
25*a6d42e7dSPeter Dunlap  */
26*a6d42e7dSPeter Dunlap 
27*a6d42e7dSPeter Dunlap #ifndef	_ISNS_PROTOCOL_H
28*a6d42e7dSPeter Dunlap #define	_ISNS_PROTOCOL_H
29*a6d42e7dSPeter Dunlap 
30*a6d42e7dSPeter Dunlap #ifdef __cplusplus
31*a6d42e7dSPeter Dunlap extern "C" {
32*a6d42e7dSPeter Dunlap #endif
33*a6d42e7dSPeter Dunlap 
34*a6d42e7dSPeter Dunlap #include <netinet/in.h>
35*a6d42e7dSPeter Dunlap #include <sys/socket.h>
36*a6d42e7dSPeter Dunlap #include <sys/types.h>
37*a6d42e7dSPeter Dunlap 
38*a6d42e7dSPeter Dunlap #define	ISNSP_VERSION			(0x01)
39*a6d42e7dSPeter Dunlap 
40*a6d42e7dSPeter Dunlap #define	ISNS_DEFAULT_SERVER_PORT	(3205)
41*a6d42e7dSPeter Dunlap 
42*a6d42e7dSPeter Dunlap #define	ISNSP_HEADER_SIZE		(12)
43*a6d42e7dSPeter Dunlap #define	ISNSP_RSP_CODE_SIZE		(4)
44*a6d42e7dSPeter Dunlap #define	ISNSP_MAX_PAYLOAD_SIZE		(65532)
45*a6d42e7dSPeter Dunlap #define	ISNSP_MAX_PDU_SIZE		(ISNSP_HEADER_SIZE + \
46*a6d42e7dSPeter Dunlap 					ISNSP_MAX_PAYLOAD_SIZE)
47*a6d42e7dSPeter Dunlap 
48*a6d42e7dSPeter Dunlap #define	ISNS_TLV_ATTR_ID_LEN		(4)
49*a6d42e7dSPeter Dunlap #define	ISNS_TLV_ATTR_LEN_LEN		(4)
50*a6d42e7dSPeter Dunlap #define	MAX_ISNS_MESG_ATTR_ENTRIES	(8)
51*a6d42e7dSPeter Dunlap #define	MAX_ISNS_OPER_ATTR_ENTRIES	(32)
52*a6d42e7dSPeter Dunlap 
53*a6d42e7dSPeter Dunlap /* iSNS Entity Protocol, iSNS Draft - section 6.2.2. */
54*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_PROTOCOL_NO		(1)
55*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_PROTOCOL_ISCSI	(2)
56*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_PROTOCOL_FCP	(3)
57*a6d42e7dSPeter Dunlap 
58*a6d42e7dSPeter Dunlap /* iSNS Function IDs, iSNS Draft - section 4.1.3. */
59*a6d42e7dSPeter Dunlap #define	ISNS_DEV_ATTR_REG		(0x0001)
60*a6d42e7dSPeter Dunlap #define	ISNS_DEV_ATTR_QRY		(0x0002)
61*a6d42e7dSPeter Dunlap #define	ISNS_DEV_GET_NEXT		(0x0003)
62*a6d42e7dSPeter Dunlap #define	ISNS_DEV_DEREG			(0x0004)
63*a6d42e7dSPeter Dunlap #define	ISNS_SCN_REG			(0x0005)
64*a6d42e7dSPeter Dunlap #define	ISNS_SCN_DEREG			(0x0006)
65*a6d42e7dSPeter Dunlap #define	ISNS_SCN_EVENT			(0x0007)
66*a6d42e7dSPeter Dunlap #define	ISNS_SCN			(0x0008)
67*a6d42e7dSPeter Dunlap #define	ISNS_DD_REG			(0x0009)
68*a6d42e7dSPeter Dunlap #define	ISNS_DD_DEREG			(0x000A)
69*a6d42e7dSPeter Dunlap #define	ISNS_DDS_REG			(0x000B)
70*a6d42e7dSPeter Dunlap #define	ISNS_DDS_DEREG			(0x000C)
71*a6d42e7dSPeter Dunlap #define	ISNS_ESI			(0x000D)
72*a6d42e7dSPeter Dunlap #define	ISNS_HEARTBEAT			(0x000E)
73*a6d42e7dSPeter Dunlap #define	ISNS_DEV_ATTR_REG_RSP		(0x8001)
74*a6d42e7dSPeter Dunlap #define	ISNS_DEV_ATTR_QRY_RSP		(0x8002)
75*a6d42e7dSPeter Dunlap #define	ISNS_DEV_GET_NEXT_RSP		(0x8003)
76*a6d42e7dSPeter Dunlap #define	ISNS_DEV_DEREG_RSP		(0x8004)
77*a6d42e7dSPeter Dunlap #define	ISNS_SCN_REG_RSP		(0x8005)
78*a6d42e7dSPeter Dunlap #define	ISNS_SCN_DEREG_RSP		(0x8006)
79*a6d42e7dSPeter Dunlap #define	ISNS_SCN_EVENT_RSP		(0x8007)
80*a6d42e7dSPeter Dunlap #define	ISNS_SCN_RSP			(0x8008)
81*a6d42e7dSPeter Dunlap #define	ISNS_DD_REG_RSP			(0x8009)
82*a6d42e7dSPeter Dunlap #define	ISNS_DD_DEREG_RSP		(0x800A)
83*a6d42e7dSPeter Dunlap #define	ISNS_DDS_REG_RSP		(0x800B)
84*a6d42e7dSPeter Dunlap #define	ISNS_DDS_DEREG_RSP		(0x800C)
85*a6d42e7dSPeter Dunlap #define	ISNS_ESI_RSP			(0x800D)
86*a6d42e7dSPeter Dunlap 
87*a6d42e7dSPeter Dunlap /* iSNS Flags, iSNS Draft - section 5.1.4. */
88*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_FIRST_PDU		(0x0400)
89*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_LAST_PDU		(0x0800)
90*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_REPLACE_REG		(0x1000)
91*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_AUTH_BLK_PRESENTED	(0x2000)
92*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_SERVER		(0x4000)
93*a6d42e7dSPeter Dunlap #define	ISNS_FLAG_CLIENT		(0x8000)
94*a6d42e7dSPeter Dunlap 
95*a6d42e7dSPeter Dunlap /* iSNS Response Status, iSNS Draft - section 5.4 */
96*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SUCCESSFUL		(0)
97*a6d42e7dSPeter Dunlap #define	ISNS_RSP_UNKNOWN_ERROR		(1)
98*a6d42e7dSPeter Dunlap #define	ISNS_RSP_MSG_FORMAT_ERROR	(2)
99*a6d42e7dSPeter Dunlap #define	ISNS_RSP_INVALID_REGIS		(3)
100*a6d42e7dSPeter Dunlap #define	ISNS_RSP_INVALID_QRY		(5)
101*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SRC_UNKNOWN		(6)
102*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SRC_ABSENT		(7)
103*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SRC_UNAUTHORIZED	(8)
104*a6d42e7dSPeter Dunlap #define	ISNS_RSP_NO_SUCH_ENTRY		(9)
105*a6d42e7dSPeter Dunlap #define	ISNS_RSP_VER_NOT_SUPPORTED	(10)
106*a6d42e7dSPeter Dunlap #define	ISNS_RSP_INTERNAL_ERROR		(11)
107*a6d42e7dSPeter Dunlap #define	ISNS_RSP_BUSY			(12)
108*a6d42e7dSPeter Dunlap #define	ISNS_RSP_OPTION_NOT_UNDERSTOOD	(13)
109*a6d42e7dSPeter Dunlap #define	ISNS_RSP_INVALID_UPDATE		(14)
110*a6d42e7dSPeter Dunlap #define	ISNS_RSP_MSG_NOT_SUPPORTED	(15)
111*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SCN_EVENT_REJECTED	(16)
112*a6d42e7dSPeter Dunlap #define	ISNS_RSP_SCN_REGIS_REJECTED	(17)
113*a6d42e7dSPeter Dunlap #define	ISNS_RSP_ATTR_NOT_IMPL		(18)
114*a6d42e7dSPeter Dunlap #define	ISNS_RSP_ESI_NOT_AVAILABLE	(21)
115*a6d42e7dSPeter Dunlap #define	ISNS_RSP_INVALID_DEREGIS	(22)
116*a6d42e7dSPeter Dunlap #define	ISNS_RSP_REGIS_NOT_SUPPORTED	(23)
117*a6d42e7dSPeter Dunlap 
118*a6d42e7dSPeter Dunlap /* iSNS Attribute IDs, iSNS Draft - section 6.1. */
119*a6d42e7dSPeter Dunlap #define	ISNS_DELIMITER_ATTR_ID		(0)
120*a6d42e7dSPeter Dunlap #define	ISNS_EID_ATTR_ID		(1)
121*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_PROTOCOL_ATTR_ID	(2)
122*a6d42e7dSPeter Dunlap #define	ISNS_MGMT_IP_ADDR_ATTR_ID	(3)
123*a6d42e7dSPeter Dunlap #define	ISNS_TIMESTAMP_ATTR_ID		(4)
124*a6d42e7dSPeter Dunlap #define	ISNS_VERSION_RANGE_ATTR_ID	(5)
125*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_REG_PERIOD_ATTR_ID	(6)
126*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_INDEX_ATTR_ID	(7)
127*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_NEXT_INDEX_ATTR_ID	(8)
128*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_ISAKMP_P1_ATTR_ID	(11)
129*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_CERT_ATTR_ID	(12)
130*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_IP_ADDR_ATTR_ID	(16)
131*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_PORT_ATTR_ID	(17)
132*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_NAME_ATTR_ID	(18)
133*a6d42e7dSPeter Dunlap #define	ISNS_ESI_INTERVAL_ATTR_ID	(19)
134*a6d42e7dSPeter Dunlap #define	ISNS_ESI_PORT_ATTR_ID		(20)
135*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_INDEX_ATTR_ID	(22)
136*a6d42e7dSPeter Dunlap #define	ISNS_SCN_PORT_ATTR_ID		(23)
137*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_NEXT_INDEX_ATTR_ID	(24)
138*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_SEC_BMP_ATTR_ID	(27)
139*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_ISAKMP_P1_ATTR_ID	(28)
140*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_ISAKMP_P2_ATTR_ID	(29)
141*a6d42e7dSPeter Dunlap #define	ISNS_PORTAL_CERT_ATTR_ID	(31)
142*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_NAME_ATTR_ID		(32)
143*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_NODE_TYPE_ATTR_ID	(33)
144*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_ALIAS_ATTR_ID	(34)
145*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_SCN_BITMAP_ATTR_ID	(35)
146*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_NODE_INDEX_ATTR_ID	(36)
147*a6d42e7dSPeter Dunlap #define	ISNS_WWNN_TOKEN_ATTR_ID		(37)
148*a6d42e7dSPeter Dunlap #define	ISNS_NODE_NEXT_INDEX_ATTR_ID	(38)
149*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_AUTH_METHOD_ATTR_ID	(42)
150*a6d42e7dSPeter Dunlap #define	ISNS_PG_ISCSI_NAME_ATTR_ID	(48)
151*a6d42e7dSPeter Dunlap #define	ISNS_PG_PORTAL_IP_ADDR_ATTR_ID	(49)
152*a6d42e7dSPeter Dunlap #define	ISNS_PG_PORTAL_PORT_ATTR_ID	(50)
153*a6d42e7dSPeter Dunlap #define	ISNS_PG_TAG_ATTR_ID		(51)
154*a6d42e7dSPeter Dunlap #define	ISNS_PG_INDEX_ATTR_ID		(52)
155*a6d42e7dSPeter Dunlap #define	ISNS_PG_NEXT_ID_ATTR_ID		(53)
156*a6d42e7dSPeter Dunlap #define	ISNS_DD_SET_ID_ATTR_ID		(2049)
157*a6d42e7dSPeter Dunlap #define	ISNS_DD_SET_NAME_ATTR_ID	(2050)
158*a6d42e7dSPeter Dunlap #define	ISNS_DD_SET_STATUS_ATTR_ID	(2051)
159*a6d42e7dSPeter Dunlap #define	ISNS_DD_ID_ATTR_ID		(2065)
160*a6d42e7dSPeter Dunlap #define	ISNS_DD_NAME_ATTR_ID		(2066)
161*a6d42e7dSPeter Dunlap #define	ISNS_DD_ISCSI_INDEX_ATTR_ID	(2067)
162*a6d42e7dSPeter Dunlap #define	ISNS_DD_ISCSI_NAME_ATTR_ID	(2068)
163*a6d42e7dSPeter Dunlap #define	ISNS_DD_FC_PORT_NAME_ATTR_ID	(2069)
164*a6d42e7dSPeter Dunlap #define	ISNS_DD_PORTAL_INDEX_ATTR_ID	(2070)
165*a6d42e7dSPeter Dunlap #define	ISNS_DD_PORTAL_IP_ADDR_ATTR_ID	(2071)
166*a6d42e7dSPeter Dunlap #define	ISNS_DD_PORTAL_PORT_ATTR_ID	(2072)
167*a6d42e7dSPeter Dunlap #define	ISNS_DD_FEATURES_ATTR_ID	(2078)
168*a6d42e7dSPeter Dunlap 
169*a6d42e7dSPeter Dunlap /* Entity Protocol, RFC 4171 - section 6.2.2. */
170*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_NO_PROTOCOL		(1)
171*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_ISCSI		(2)
172*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_IFCP		(3)
173*a6d42e7dSPeter Dunlap 
174*a6d42e7dSPeter Dunlap /* Protocol Version Range, RFC 4171 - section 6.2.5. */
175*a6d42e7dSPeter Dunlap #define	ISNS_VER_SHIFT			(16)
176*a6d42e7dSPeter Dunlap #define	ISNS_VERSION			(0x0000FFFF)
177*a6d42e7dSPeter Dunlap 
178*a6d42e7dSPeter Dunlap /* Portal Port, RFC 4171 - section 6.3.2. */
179*a6d42e7dSPeter Dunlap #define	ISNS_PORT_BITS			(0x0000FFFF)    /* Bits 16 - 31 */
180*a6d42e7dSPeter Dunlap #define	ISNS_PORT_TYPE			(0x00010000)    /* Bit 15 */
181*a6d42e7dSPeter Dunlap 
182*a6d42e7dSPeter Dunlap /* Portal Security Bitmap, RFC 4171 - section 6.3.9. */
183*a6d42e7dSPeter Dunlap #define	ISNS_TUNNEL_MODE_PREFERRED	(0x0040)	/* Bit 25 */
184*a6d42e7dSPeter Dunlap #define	ISNS_TRANS_MODE_PREFERRED	(0x0020)	/* Bit 26 */
185*a6d42e7dSPeter Dunlap #define	ISNS_PFS_ENABLED		(0x0010)	/* Bit 27 */
186*a6d42e7dSPeter Dunlap #define	ISNS_AGGR_MODE_ENABLED		(0x0008)	/* Bit 28 */
187*a6d42e7dSPeter Dunlap #define	ISNS_MAIN_MODE_ENABLED		(0x0004)	/* Bit 29 */
188*a6d42e7dSPeter Dunlap #define	ISNS_IKE_IPSEC_ENABLED		(0x0002)	/* Bit 30 */
189*a6d42e7dSPeter Dunlap #define	ISNS_BITMAP_VALID		(0x0001)	/* Bit 31 */
190*a6d42e7dSPeter Dunlap 
191*a6d42e7dSPeter Dunlap /* iSCSI Node Type, RFC 4171 - section 6.4.2. */
192*a6d42e7dSPeter Dunlap #define	ISNS_TARGET_NODE_TYPE		(0x0001)
193*a6d42e7dSPeter Dunlap #define	ISNS_INITIATOR_NODE_TYPE	(0x0002)
194*a6d42e7dSPeter Dunlap #define	ISNS_CONTROL_NODE_TYPE		(0x0004)
195*a6d42e7dSPeter Dunlap 
196*a6d42e7dSPeter Dunlap /* iSCSI Node SCN Bitmap, RFC 4171 - section 6.4.4. */
197*a6d42e7dSPeter Dunlap #define	ISNS_INIT_SELF_INFO_ONLY	(0x0080)	/* Bit 24 */
198*a6d42e7dSPeter Dunlap #define	ISNS_TARGET_SELF_INFO_ONLY	(0x0040)	/* Bit 25 */
199*a6d42e7dSPeter Dunlap #define	ISNS_MGMT_REG			(0x0020)	/* Bit 26 */
200*a6d42e7dSPeter Dunlap #define	ISNS_OBJECT_REMOVED		(0x0010)	/* Bit 27 */
201*a6d42e7dSPeter Dunlap #define	ISNS_OBJECT_ADDED		(0x0008)	/* Bit 28 */
202*a6d42e7dSPeter Dunlap #define	ISNS_OBJECT_UPDATED		(0x0004)	/* Bit 29 */
203*a6d42e7dSPeter Dunlap #define	ISNS_MEMBER_REMOVED		(0x0002)	/* Bit 30 */
204*a6d42e7dSPeter Dunlap #define	ISNS_MEMBER_ADDED		(0x0001)	/* Bit 31 */
205*a6d42e7dSPeter Dunlap 
206*a6d42e7dSPeter Dunlap /* Portal Group Tag, RFC 4171 - section 6.5.4. */
207*a6d42e7dSPeter Dunlap #define	ISNS_PG_TAG			(0x0000FFFF)	/* Bits 16 - 31 */
208*a6d42e7dSPeter Dunlap 
209*a6d42e7dSPeter Dunlap /* DDS Status, RFC 4171 - section 6.11.1.3. */
210*a6d42e7dSPeter Dunlap #define	ISNS_DDS_STATUS			(0x0001)	/* Bit 31 */
211*a6d42e7dSPeter Dunlap 
212*a6d42e7dSPeter Dunlap /* DD Feature, RFC 4171 - section 6.11.2.9. */
213*a6d42e7dSPeter Dunlap #define	ISNS_DD_BOOTLIST		(0x0001)	/* Bit 31 */
214*a6d42e7dSPeter Dunlap 
215*a6d42e7dSPeter Dunlap /* iSNS Defaults */
216*a6d42e7dSPeter Dunlap #define	ISNS_DEFAULT_PGT		(0x00000001)
217*a6d42e7dSPeter Dunlap #define	ISNS_DEFAULT_DD_SET_ID		(1)
218*a6d42e7dSPeter Dunlap #define	ISNS_DEFAULT_DD_ID		(1)
219*a6d42e7dSPeter Dunlap 
220*a6d42e7dSPeter Dunlap /* Min/Max length of names */
221*a6d42e7dSPeter Dunlap #define	ISNS_DDS_MAX_NAME_LEN		(256)
222*a6d42e7dSPeter Dunlap #define	ISNS_DD_MAX_NAME_LEN		(256)
223*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_MAX_NAME_LEN		(224)
224*a6d42e7dSPeter Dunlap #define	ISNS_ISCSI_MAX_ALIAS_LEN	(256)
225*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_MIN_EID_LEN		(3)
226*a6d42e7dSPeter Dunlap #define	ISNS_ENTITY_MAX_EID_LEN		(255)
227*a6d42e7dSPeter Dunlap 
228*a6d42e7dSPeter Dunlap 
229*a6d42e7dSPeter Dunlap typedef struct isns_tlv {
230*a6d42e7dSPeter Dunlap 	uint32_t attr_id;
231*a6d42e7dSPeter Dunlap 	uint32_t attr_len;
232*a6d42e7dSPeter Dunlap 	uint8_t attr_value[1];
233*a6d42e7dSPeter Dunlap } isns_tlv_t;
234*a6d42e7dSPeter Dunlap 
235*a6d42e7dSPeter Dunlap typedef struct isns_packet_data {
236*a6d42e7dSPeter Dunlap 	uint16_t version;
237*a6d42e7dSPeter Dunlap 	uint16_t func_id;
238*a6d42e7dSPeter Dunlap 	uint16_t payload_len;
239*a6d42e7dSPeter Dunlap 	uint16_t flags;
240*a6d42e7dSPeter Dunlap 	uint16_t xid;
241*a6d42e7dSPeter Dunlap 	uint16_t seq;
242*a6d42e7dSPeter Dunlap 
243*a6d42e7dSPeter Dunlap 	int num_of_tlvs;
244*a6d42e7dSPeter Dunlap 	isns_tlv_t tlvs[MAX_ISNS_OPER_ATTR_ENTRIES];
245*a6d42e7dSPeter Dunlap } isns_packet_data_t;
246*a6d42e7dSPeter Dunlap 
247*a6d42e7dSPeter Dunlap typedef struct isns_reg_mesg {
248*a6d42e7dSPeter Dunlap 	isns_tlv_t src_attr;
249*a6d42e7dSPeter Dunlap 	int num_of_mesg_attrs;
250*a6d42e7dSPeter Dunlap 	isns_tlv_t *mesg_attrs[MAX_ISNS_MESG_ATTR_ENTRIES];
251*a6d42e7dSPeter Dunlap 	isns_tlv_t delimiter_attr;
252*a6d42e7dSPeter Dunlap 	isns_tlv_t *operating_attrs[MAX_ISNS_OPER_ATTR_ENTRIES];
253*a6d42e7dSPeter Dunlap } isns_reg_mesg_t;
254*a6d42e7dSPeter Dunlap 
255*a6d42e7dSPeter Dunlap typedef struct isns_resp_mesg {
256*a6d42e7dSPeter Dunlap 	uint8_t	status[4];
257*a6d42e7dSPeter Dunlap 	isns_tlv_t messages_attrs[MAX_ISNS_MESG_ATTR_ENTRIES];
258*a6d42e7dSPeter Dunlap 	isns_tlv_t delimiter_attr;
259*a6d42e7dSPeter Dunlap 	isns_tlv_t operating_attrs[MAX_ISNS_OPER_ATTR_ENTRIES];
260*a6d42e7dSPeter Dunlap } isns_resp_mesg_t;
261*a6d42e7dSPeter Dunlap 
262*a6d42e7dSPeter Dunlap typedef struct isns_pdu {
263*a6d42e7dSPeter Dunlap 	uint16_t version;
264*a6d42e7dSPeter Dunlap 	uint16_t func_id;
265*a6d42e7dSPeter Dunlap 	uint16_t payload_len;
266*a6d42e7dSPeter Dunlap 	uint16_t flags;
267*a6d42e7dSPeter Dunlap 	uint16_t xid;
268*a6d42e7dSPeter Dunlap 	uint16_t seq;
269*a6d42e7dSPeter Dunlap 	uint8_t payload[1];
270*a6d42e7dSPeter Dunlap } isns_pdu_t;
271*a6d42e7dSPeter Dunlap 
272*a6d42e7dSPeter Dunlap typedef struct isns_resp {
273*a6d42e7dSPeter Dunlap 	uint32_t status;
274*a6d42e7dSPeter Dunlap 	uint8_t data[1];
275*a6d42e7dSPeter Dunlap } isns_resp_t;
276*a6d42e7dSPeter Dunlap 
277*a6d42e7dSPeter Dunlap #ifdef __cplusplus
278*a6d42e7dSPeter Dunlap }
279*a6d42e7dSPeter Dunlap #endif
280*a6d42e7dSPeter Dunlap 
281*a6d42e7dSPeter Dunlap #endif /* _ISNS_PROTOCOL_H */
282