1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26/******************************************************************************
27 *
28 * Description
29 *  Ima.h - general header file for client
30 *       and library developers
31 *
32 * License:
33 *  The contents of this file are subject to the SNIA Public License
34 *  Version 1.0 (the "License"); you may not use this file except in
35 *  compliance with the License. You may obtain a copy of the License at
36 *
37 *  /http://www.snia.org/English/Resources/Code/OpenSource.html
38 *
39 *  Software distributed under the License is distributed on an "AS IS"
40 *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
41 *  the License for the specific language governing rights and limitations
42 *  under the License.
43 *
44 * The Original Code is  SNIA HBA API and IMA general header file
45 *
46 * The Initial Developer of the Original Code is:
47 *      Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com)
48 *      David Dillard       VERITAS Software        david.dillard@veritas.com
49 *
50 * Contributor(s):
51 *  Jeff Ding, Adaptec, Inc. (jding@corp.adaptec.com)
52 *  Dave Wysochanski, Network Appliance, Inc. (davidw@netapp.com)
53 *
54 ******************************************************************************
55 *
56 *   Changes:
57 *  09/24/2003 Initial Draft
58 *  (for other changes... see the CVS logs)
59 *  12/15/2003 corrected the defined parameter in IMA_SetPhbaIsnsDiscovery().
60 *             lower case the computer name as iscsi name in
61 *             IMA_GenerateNodeName().
62 *  03/01/2004 Brought up to date with respect to IMA v1.0.1; made formatting
63 *             changes - lines to 80 cols - for readability.
64 *
65 *  01/21/2005 Updated to support IMA 1.1.3.
66 *****************************************************************************/
67#ifdef __cplusplus
68extern "C" {
69#endif
70
71#ifndef IMA_H
72#define IMA_H
73
74#include <time.h>
75#include <wchar.h>
76
77
78/* Library version string */
79#define HBA_LIBVERSION 2
80
81#define	IMA_MAX_CALLBACK_PER_PLUGIN	64
82#define IMA_MAX_NUM_PLUGINS		32
83
84/* DLL imports for WIN32 operation */
85#ifdef WIN32
86#ifdef IMA_EXPORTS
87#define IMA_API __declspec(dllexport)
88#else
89#define IMA_API __declspec(dllimport)
90#endif
91#else
92#define IMA_API
93#endif
94
95/* OS specific definitions */
96
97#ifdef WIN32
98typedef unsigned char   IMA_UINT8;  // Unsigned  8 bits
99typedef char            IMA_INT8;   // Signed    8 bits
100typedef unsigned short  IMA_UINT16; // Unsigned 16 bits
101typedef short           IMA_INT16;  // Signed   16 bits
102typedef unsigned int    IMA_UINT32; // Unsigned 32 bits
103typedef int             IMA_INT32;  // Signed   32 bits
104typedef void*           IMA_PVOID;  // Pointer  to void
105typedef IMA_UINT32      IMA_VOID32; // Opaque   32 bits
106
107
108/* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */
109#ifdef _WIN32
110typedef __int64             IMA_INT64;
111typedef unsigned __int64    IMA_UINT64;
112#else
113typedef struct {
114    TN_UINT32   lo_val;
115    TN_UINT32   hi_val;
116} IMA_INT64;
117
118typedef struct {
119    TN_UINT32   lo_val;
120    TN_UINT32   hi_val;
121} IMA_UINT64;
122#endif  /*  #ifdef _WIN32   */
123
124
125#else
126
127/* Note this section needs to be cleaned up for various Unix platforms */
128typedef unsigned char   IMA_UINT8;  /* Unsigned  8 bits */
129typedef char            IMA_INT8;   /* Signed    8 bits */
130typedef unsigned short  IMA_UINT16; /* Unsigned 16 bits */
131typedef short           IMA_INT16;  /* Signed   16 bits */
132typedef unsigned int    IMA_UINT32; /* Unsigned 32 bits */
133typedef int             IMA_INT32;  /* Signed   32 bits */
134typedef void*           IMA_PVOID;  /* Pointer  to void */
135typedef IMA_UINT32      IMA_VOID32; /* Opaque   32 bits */
136typedef long long       IMA_INT64;
137typedef long long       IMA_UINT64;
138
139#endif  /*  #ifdef WIN32 */
140
141
142
143/**
144*******************************************************************************
145*
146* Generic IMA Constant Definitions
147*
148*******************************************************************************
149*/
150#define RL_LIBRARY_SEQNUM           0
151#define RL_SHARED_NODE_SEQNUM       0
152
153/**
154* Value which can be assigned to an IMA_BOOL and or an IMA_XBOOL.
155*/
156#define IMA_TRUE        1
157
158/**
159* Value which can be assigned to an IMA_BOOL and or an IMA_XBOOL.
160*/
161#define IMA_FALSE       0
162
163/**
164* Value which can be assigned to an IMA_XBOOL.
165*/
166#define IMA_UNKNOWN     0xFFFFFFFF
167
168
169
170/**
171*******************************************************************************
172*
173* Base IMA Type Definitions
174*
175* @note Types that have a specific size must be defined ImaOsTypes.h which is
176*       an OS specific include file which is included by this file.
177*
178*******************************************************************************
179*/
180
181/**
182* A character.
183*/
184typedef char IMA_CHAR;
185
186/**
187* A wide character.
188*/
189typedef wchar_t IMA_WCHAR;
190
191/**
192* An integer.  Spec states this is 32 bits on 32-bit systems, and 64-bit
193* on 64-bit systems.
194*/
195typedef unsigned long IMA_UINT;
196
197/**
198* A boolean.
199*/
200typedef IMA_UINT32 IMA_BOOL;
201
202/**
203* An extended boolean: can have the values @ref IMA_TRUE, @ref IMA_FALSE, and
204* @ref IMA_UNKNOWN.
205*/
206typedef IMA_UINT32 IMA_XBOOL;
207
208/**
209* A date and time.
210*/
211typedef struct tm IMA_DATETIME;
212
213typedef unsigned char IMA_BYTE;
214
215/**
216*******************************************************************************
217*
218* Constants and macros declarations related to IMA_STATUS
219*
220*******************************************************************************
221*/
222#ifdef SOLARIS
223typedef IMA_UINT IMA_STATUS;
224
225#define	IMA_STATUS_SUCCESS		0x00000000
226#define	IMA_STATUS_ERROR		0x80000000
227
228#define	IMA_SUCCESS(status) (((IMA_STATUS)(status) & \
229	    (IMA_STATUS)IMA_STATUS_ERROR) == 0 ? IMA_TRUE : IMA_FALSE)
230#define	IMA_ERROR(status)   (((IMA_STATUS)(status) & \
231	    (IMA_STATUS)IMA_STATUS_ERROR) == 0x8000000 ? IMA_TRUE : IMA_FALSE)
232
233#define	MAKE_IMA_STATUS(x)	((IMA_STATUS)(x))
234#define	MAKE_IMA_ERROR(x)	((IMA_STATUS)(IMA_STATUS_ERROR | (x)))
235#define	GET_SYSTEM_ERROR(x)	(((IMA_STATUS)(x) & 0x0000FFFF))
236
237#define	IMA_STATUS_REBOOT_NECESSARY		MAKE_IMA_STATUS(0x01)
238#define	IMA_STATUS_INCONSISTENT_NODE_PROPERTIES	MAKE_IMA_STATUS(0x02)
239#define	IMA_STATUS_SCSI_STATUS_CONDITION_MET	MAKE_IMA_STATUS(0x100)
240
241#define	IMA_ERROR_NOT_SUPPORTED			MAKE_IMA_ERROR(0x01)
242#define	IMA_ERROR_INSUFFICIENT_MEMORY		MAKE_IMA_ERROR(0x02)
243#define	IMA_ERROR_LAST_PRIMARY_DISCOVERY_METHOD	MAKE_IMA_ERROR(0x03)
244#define	IMA_ERROR_UNEXPECTED_OS_ERROR		MAKE_IMA_ERROR(0x04)
245#define	IMA_ERROR_SYNC_TIMEOUT			MAKE_IMA_ERROR(0x05)
246#define	IMA_ERROR_LU_EXPOSED			MAKE_IMA_ERROR(0x06)
247#define	IMA_ERROR_LU_NOT_EXPOSED		MAKE_IMA_ERROR(0x07)
248#define	IMA_ERROR_LU_IN_USE			MAKE_IMA_ERROR(0x08)
249#define	IMA_ERROR_TARGET_TIMEOUT		MAKE_IMA_ERROR(0x09)
250#define	IMA_ERROR_LOGIN_REJECTED		MAKE_IMA_ERROR(0x0A)
251#define	IMA_ERROR_STATS_COLLECTION_NOT_ENABLED	MAKE_IMA_ERROR(0x0B)
252#define	IMA_ERROR_SCSI_STATUS_CHECK_CONDITION	MAKE_IMA_ERROR(0x100)
253#define	IMA_ERROR_SCSI_STATUS_BUSY		MAKE_IMA_ERROR(0x101)
254#define	IMA_ERROR_SCSI_STATUS_RESERVATION_CONFLICT  	MAKE_IMA_ERROR(0x102)
255#define	IMA_ERROR_SCSI_STATUS_TASK_SET_FULL	MAKE_IMA_ERROR(0x103)
256#define	IMA_ERROR_SCSI_STATUS_ACA_ACTIVE	MAKE_IMA_ERROR(0x104)
257#define	IMA_ERROR_SCSI_STATUS_TASK_ABORTED	MAKE_IMA_ERROR(0x105)
258#define	IMA_ERROR_INVALID_PARAMETER		MAKE_IMA_ERROR(0x40000000)
259#define	IMA_ERROR_INVALID_OBJECT_TYPE		MAKE_IMA_ERROR(0x40000001)
260#define	IMA_ERROR_INCORRECT_OBJECT_TYPE		MAKE_IMA_ERROR(0x40000002)
261#define	IMA_ERROR_OBJECT_NOT_FOUND		MAKE_IMA_ERROR(0x40000003)
262#define	IMA_ERROR_NAME_TOO_LONG			MAKE_IMA_ERROR(0x40000004)
263#define	IMA_ERROR_UNKNOWN_ERROR			MAKE_IMA_ERROR(0x0fffffff)
264
265#else
266
267typedef enum {
268    IMA_STATUS_SUCCESS                      = 0x00000000,
269    IMA_STATUS_REBOOT_NECESSARY             = 0x00000001,
270    IMA_STATUS_INCONSISTENT_NODE_PROPERTIES = 0x00000002,
271    IMA_STATUS_SCSI_STATUS_CONDITION_MET    = 0x00000100,
272
273    IMA_STATUS_ERROR                        = 0x80000000,
274    IMA_ERROR_NOT_SUPPORTED                 = 0x80000001,
275    IMA_ERROR_INSUFFICIENT_MEMORY           = 0x80000002,
276    IMA_ERROR_LAST_PRIMARY_DISCOVERY_METHOD = 0x80000003,
277    IMA_ERROR_UNEXPECTED_OS_ERROR           = 0x80000004,
278    IMA_ERROR_SYNC_TIMEOUT                  = 0x80000005,
279    IMA_ERROR_LU_EXPOSED                    = 0x80000006,
280    IMA_ERROR_LU_NOT_EXPOSED                = 0x80000007,
281    IMA_ERROR_LU_IN_USE                     = 0x80000008,
282    IMA_ERROR_TARGET_TIMEOUT                = 0x80000009,
283    IMA_ERROR_LOGIN_REJECTED                = 0x8000000A,
284    IMA_ERROR_STATS_COLLECTION_NOT_ENABLED  = 0x8000000B,
285    IMA_ERROR_SCSI_STATUS_CHECK_CONDITION      = 0x80000100,
286    IMA_ERROR_SCSI_STATUS_BUSY                 = 0x80000101,
287    IMA_ERROR_SCSI_STATUS_RESERVATION_CONFLICT = 0x80000102,
288    IMA_ERROR_SCSI_STATUS_TASK_SET_FULL        = 0x80000103,
289    IMA_ERROR_SCSI_STATUS_ACA_ACTIVE           = 0x80000104,
290    IMA_ERROR_SCSI_STATUS_TASK_ABORTED         = 0x80000105,
291    IMA_ERROR_INVALID_PARAMETER             = 0xC0000000,
292    IMA_ERROR_INVALID_OBJECT_TYPE           = 0xC0000001,
293    IMA_ERROR_INCORRECT_OBJECT_TYPE         = 0xC0000002,
294    IMA_ERROR_OBJECT_NOT_FOUND              = 0xC0000003,
295    IMA_ERROR_NAME_TOO_LONG                 = 0xC0000004,
296    IMA_ERROR_UNKNOWN_ERROR                 = 0x8FFFFFFF
297} IMA_STATUS;
298
299/*
300#define IMA_SUCCESS(status)     ( (IMA_UINT32)(status) & \
301                                  (IMA_UINT32)IMA_STATUS_ERROR == 0 ? \
302                                  IMA_TRUE : IMA_FALSE )
303#define IMA_ERROR(status)       ( (IMA_UINT32)(status) & \
304                                  (IMA_UINT32)IMA_STATUS_ERROR == 0x8000000 ? \
305                                  IMA_TRUE : IMA_FALSE )
306*/
307
308#define IMA_SUCCESS(status)							!((status) & IMA_STATUS_ERROR)
309#define IMA_ERROR(status)							((status) & IMA_STATUS_ERROR)
310
311#endif
312
313/**
314*******************************************************************************
315*
316* Declaration of the IMA_OBJECT_TYPE enumeration
317*
318*******************************************************************************
319*/
320typedef enum
321{
322    IMA_OBJECT_TYPE_UNKNOWN =   0,
323    IMA_OBJECT_TYPE_PLUGIN  =   1,
324    IMA_OBJECT_TYPE_NODE    =   2,
325    IMA_OBJECT_TYPE_LHBA    =   3,
326    IMA_OBJECT_TYPE_PHBA    =   4,
327    IMA_OBJECT_TYPE_NETWORK_PORTAL  =   5,
328    IMA_OBJECT_TYPE_PORTAL_GROUP    =   6,
329    IMA_OBJECT_TYPE_LNP =   7,
330    IMA_OBJECT_TYPE_PNP =   8,
331    IMA_OBJECT_TYPE_TARGET  =   9,
332    IMA_OBJECT_TYPE_LU  =   10,
333	IMA_OBJECT_TYPE_DISCOVERY_ADDRESS = 11,
334	IMA_OBJECT_TYPE_STATIC_DISCOVERY_TARGET = 12,
335    IMA_OBJECT_TYPE_CONNECTION	=	13,
336	IMA_OBJECT_TYPE_SESSION	=	14
337} IMA_OBJECT_TYPE;
338
339typedef enum
340{
341    IMA_ISNS_DISCOVERY_METHOD_STATIC    =   0,
342    IMA_ISNS_DISCOVERY_METHOD_DHCP  =   1,
343    IMA_ISNS_DISCOVERY_METHOD_SLP   =   2
344} IMA_ISNS_DISCOVERY_METHOD;
345
346typedef enum
347{
348    IMA_DOWNLOAD_IMAGE_TYPE_FIRMWARE    =   0,
349    IMA_DOWNLOAD_IMAGE_TYPE_OPTION_ROM  =   1,
350    IMA_DOWNLOAD_IMAGE_TYPE_ALL =   2,
351	IMA_DOWNLOAD_IMAGE_TYPE_BOOTCODE = 3
352} IMA_PHBA_DOWNLOAD_IMAGE_TYPE;
353
354typedef enum
355{
356    IMA_PHBA_STATUS_WORKING =   0,
357    IMA_PHBA_STATUS_FAILED  =   1
358} IMA_PHBA_STATUS;
359
360typedef enum
361{
362    IMA_NETWORK_PORT_STATUS_WORKING =   0,
363    IMA_NETWORK_PORT_STATUS_DEGRADED    =   1,
364    IMA_NETWORK_PORT_STATUS_CRITICAL    =   2,
365    IMA_NETWORK_PORT_STATUS_FAILED  =   3,
366    IMA_NETWORK_PORT_STATUS_DISCONNECTED    =   4
367} IMA_NETWORK_PORT_STATUS;
368
369typedef enum
370{
371    IMA_TARGET_DISCOVERY_METHOD_STATIC      =   1,
372    IMA_TARGET_DISCOVERY_METHOD_SLP     =   2,
373    IMA_TARGET_DISCOVERY_METHOD_ISNS        =   4,
374    IMA_TARGET_DISCOVERY_METHOD_SENDTARGETS =   8
375} IMA_TARGET_DISCOVERY_METHOD;
376
377typedef enum
378{
379    IMA_AUTHMETHOD_NONE =   0,
380    IMA_AUTHMETHOD_CHAP =   1,
381    IMA_AUTHMETHOD_SRP  =   2,
382    IMA_AUTHMETHOD_KRB5 =   3,
383    IMA_AUTHMETHOD_SPKM1    =   4,
384    IMA_AUTHMETHOD_SPKM2    =   5
385} IMA_AUTHMETHOD;
386
387typedef enum
388{
389	IMA_COMMIT_TYPE_AUTO	= 0,
390	IMA_COMMIT_TYPE_ACTIVE,
391	IMA_COMMIT_TYPE_PERSISTENT,
392	IMA_COMMIT_TYPE_ACTIVE_AND_PERSISTENT,
393	IMA_COMMIT_TYPE_ALL_WITH_RESET
394} IMA_COMMIT_LEVEL;
395
396typedef enum
397{
398	IMA_DIGEST_NONE		= 0,
399	IMA_DIGEST_CRC32C		= 1
400} IMA_DIGEST_TYPE;
401
402
403/**
404*******************************************************************************
405*
406* Declaration of the IMA_OID structure
407*
408* This structure should be treated as opaque by clients of the API.
409* Appropriate APIs should be used to extract information from the structure.
410*
411*******************************************************************************
412*/
413typedef struct _IMA_OID
414{
415    /**
416    * The type of the object.  When an object ID is supplied as a parameter
417    * to an API the library uses this value to insure that the supplied
418    * object's type is appropriate for the API.
419    */
420    IMA_OBJECT_TYPE objectType;
421
422    /**
423    * A value determined by the library which it uses to uniquely identify the
424    * owner of an object.  The owner of an object is either the library itself
425    * or a plugin.  When an object ID is supplied as a parameter to an API the
426    * library uses this value to determine if it should handle the call itself
427    * or direct the call to one or more plugins.
428    */
429    IMA_UINT32      ownerId;
430
431    /**
432    * A value determined by a plugin which a plugin uses, perhaps in
433    * combination with the object type, to uniquely identify one of its
434    * objects.
435    */
436    IMA_UINT64      objectSequenceNumber;
437
438} IMA_OID;
439
440
441
442/**
443*******************************************************************************
444*
445* Declaration of the IMA_OID_LIST structure
446*
447* This structure is used by a number of APIs to return lists of objects.  Any
448* instance of this structure returned by an API must be freed by a client
449* using the IMA_FreeObjectIdList API.  Although oids is declared to be an
450* array of one
451* @ref IMA_OID structure it can in fact contain any number of
452* @ref IMA_OID structures.
453*
454* @note The @a oids array is a variable length array, despite its declaration
455*       below it can be of any length.
456*
457*******************************************************************************
458*/
459typedef struct _IMA_OID_LIST
460{
461    /**
462    * The number of object IDs in the @a oids array.
463    */
464    IMA_UINT        oidCount;
465
466    /**
467    * A variable length array of zero or more object IDs.  There are
468    * 'oidCount' object IDs in this array.
469    */
470    IMA_OID         oids[1];
471
472} IMA_OID_LIST;
473
474#define IMA_HOST_NAME_LEN 256
475typedef IMA_WCHAR IMA_HOST_NAME[IMA_HOST_NAME_LEN];
476typedef IMA_BYTE IMA_MAC_ADDRESS[6];
477
478/**
479*******************************************************************************
480*
481* Declaration of the IMA_LIBRARY_PROPERTIES structure
482*
483*******************************************************************************
484*/
485typedef struct _IMA_LIBRARY_PROPERTIES
486{
487    /**
488    * The version of the iSCSI Management API implemented by the library.
489    * The value returned by a library for the API as described in this
490    * document is one.
491    */
492    IMA_UINT        supportedImaVersion;
493
494    /**
495    * A nul terminated ASCII string containing the name of the vendor that
496    * created the binary version of the library.
497    */
498    IMA_WCHAR       vendor[256];
499
500    /**
501    * A nul terminated ASCII string containing the implementation version
502    * of the library from the vendor specified in the 'vendor' field.
503    */
504    IMA_WCHAR       implementationVersion[256];
505
506    /**
507    * A nul terminated ASCII string ideally containing the path and file
508    * name of the library that is being used by the currently executing
509    * process can be found. If the path cannot be determined then it is
510    * acceptable to fill this field with only the name (and extension if
511    * applicable) of the file of the library.  If this cannot be determined
512    * then this field should be an empty string.
513    */
514    IMA_WCHAR       fileName[256];
515
516    /**
517    * The time and date that the library that is executing was built.
518    */
519    IMA_DATETIME    buildTime;
520
521    IMA_BYTE    reserved[64];
522} IMA_LIBRARY_PROPERTIES;
523
524
525
526/**
527*******************************************************************************
528*
529* Declaration of the IMA_PLUGIN_PROPERTIES structure
530*
531*******************************************************************************
532*/
533typedef struct _IMA_PLUGIN_PROPERTIES
534{
535        IMA_UINT        supportedImaVersion;
536        IMA_WCHAR       vendor[256];
537        IMA_WCHAR       implementationVersion[256];
538        IMA_WCHAR       fileName[256];
539        IMA_DATETIME    buildTime;
540
541        IMA_BOOL        lhbasCanBeCreatedAndDestroyed;
542
543        IMA_BYTE        reserved[64];
544
545} IMA_PLUGIN_PROPERTIES;
546
547
548typedef struct _IMA_IP_ADDRESS
549{
550        IMA_BOOL        ipv4Address;
551        IMA_BYTE        ipAddress[16];
552
553} IMA_IP_ADDRESS;
554
555typedef struct _IMA_ADDRESS_KEY
556{
557        IMA_IP_ADDRESS  ipAddress;
558        IMA_UINT16      portNumber;
559
560} IMA_ADDRESS_KEY;
561
562typedef struct _IMA_ADDRESS_KEYS
563{
564        IMA_UINT		addressKeyCount;
565        IMA_ADDRESS_KEY addressKeys[1];
566
567} IMA_ADDRESS_KEYS;
568
569typedef struct _IMA_ADDRESS_KEY_PROPERTIES
570{
571        IMA_UINT        addressKeyCount;
572        IMA_ADDRESS_KEY addressKeys[1];
573
574} IMA_ADDRESS_KEY_PROPERTIES;
575
576typedef struct _IMA_IP_PROPERTIES
577{
578        IMA_BOOL        ipConfigurationMethodSettable;
579        IMA_BOOL        dhcpConfigurationEnabled;
580
581        IMA_BOOL        subnetMaskSettable;
582        IMA_BOOL        subnetMaskValid;
583        IMA_IP_ADDRESS  subnetMask;
584
585        IMA_BOOL        defaultGatewaySettable;
586        IMA_BOOL        defaultGatewayValid;
587        IMA_IP_ADDRESS  defaultGateway;
588
589        IMA_BOOL        primaryDnsServerAddressSettable;
590        IMA_BOOL        primaryDnsServerAddressValid;
591        IMA_IP_ADDRESS  primaryDnsServerAddress;
592
593        IMA_BOOL        alternateDnsServerAddressSettable;
594        IMA_BOOL        alternateDnsServerAddressValid;
595        IMA_IP_ADDRESS  alternateDnsServerAddress;
596
597        IMA_BYTE        reserved[64];
598
599} IMA_IP_PROPERTIES;
600
601typedef struct _IMA_HOST_ID
602{
603		IMA_BOOL hostnameInUse;
604		union {
605
606			IMA_HOST_NAME 	hostname;
607			IMA_IP_ADDRESS 	ipAddress;
608
609		} id;
610
611} IMA_HOST_ID;
612
613typedef struct _IMA_TARGET_ADDRESS
614{
615		IMA_HOST_ID hostnameIpAddress;
616		IMA_UINT16 	portNumber;
617
618} IMA_TARGET_ADDRESS;
619
620/**
621*******************************************************************************
622*
623* Declaration of the IMA_NODE_NAME type
624*
625*******************************************************************************
626*/
627#define	IMA_NODE_NAME_LEN   224
628typedef IMA_WCHAR IMA_NODE_NAME[IMA_NODE_NAME_LEN];
629
630
631
632/**
633*******************************************************************************
634*
635* Declaration of the IMA_NODE_ALIAS type
636*
637*******************************************************************************
638*/
639#define	IMA_NODE_ALIAS_LEN	256
640typedef IMA_WCHAR IMA_NODE_ALIAS[IMA_NODE_ALIAS_LEN];
641
642
643
644/**
645*******************************************************************************
646*
647* Declaration of the IMA_DOMAIN_NAME type
648*
649* A variable of this type may be formatted in any of the following four ways:
650*       1.  An empty string, which indicates that no host or IP address is
651*           specified
652*       2.  A DNS host name
653*       3.  A dotted-decimal IPv4 address
654*       4.  A bracketed IPv6 address as specified in RFC 2732
655*
656* In all cases a domain name is terminated by a nul character.
657* This type is used by several APIs: IMA_SetPhbaSnsDiscovery(),
658* IMA_SetNetworkPortalIpAddress(), and indirectly by
659* IMA_GetPhbaDiscoveryProperties().
660*
661*******************************************************************************
662*/
663typedef wchar_t IMA_DOMAIN_NAME[256];
664
665typedef struct _IMA_PHBA_DOWNLOAD_IMAGE_PROPERTIES
666{
667        IMA_PHBA_DOWNLOAD_IMAGE_TYPE    imageType;
668        IMA_WCHAR               version[32];
669        IMA_WCHAR               description[512];
670        IMA_XBOOL               upgrade;
671} IMA_PHBA_DOWNLOAD_IMAGE_PROPERTIES;
672
673
674/**
675*******************************************************************************
676*
677* Declaration of the IMA_NODE_PROPERTIES structure
678*
679* This structure is returned by the IMA_GetNodeProperties() API.
680*
681* NOTE: It is possible for both 'runningInInitiatorMode' and
682*       'runningInTargetMode' to be set to @c IMA_TRUE.  This means that
683*       the node is operating both as an initiator and as a target.
684*
685*******************************************************************************
686*/
687typedef struct _IMA_NODE_PROPERTIES
688{
689    /**
690    * A boolean indicating if the node is running as initiator or not.
691    */
692    IMA_BOOL        runningInInitiatorMode;
693
694    /**
695    * A boolean indicating if the node is running as a target or not.
696    */
697    IMA_BOOL        runningInTargetMode;
698
699    /**
700    * A boolean which indicates if the node's name is set or not.
701    */
702    IMA_BOOL        nameValid;
703
704    /**
705    * A nul terminated Unicode string which contains the name of the node.
706    * The value in this field is only valid if 'nameValid' is set to
707    * IMA_TRUE, in which case it will be Unicode NULL terminated.  If
708    * 'nameValid' is set to IMA_FALSE then this field will contain an
709    * empty string.
710    */
711    IMA_NODE_NAME   name;
712
713    /**
714    * A boolean which indicates if the node's alias is set or not.
715    */
716    IMA_BOOL        aliasValid;
717
718    /**
719    * A nul terminated Unicode string which contains the alias of the node.
720    * This field is only valid if 'aliasValid' is set to IMA_TRUE, in which
721    * case it will be Unicode NULL terminated.  If 'aliasValid' is set to
722    * IMA_FALSE then this field will contain an empty string.
723    */
724    IMA_NODE_ALIAS  alias;
725
726    /*
727     * Boolean indicating if both the name and alias are settable using
728     * IMA_SetNodeName() and IMA_SetNodeAlias().
729     */
730    IMA_BOOL    nameAndAliasSettable;
731
732    IMA_BYTE    reserved[64];
733
734} IMA_NODE_PROPERTIES;
735
736
737
738/**
739*******************************************************************************
740*
741* Declaration of the IMA_LHBA_PROPERTIES structure
742*
743* This structure is returned by the IMA_GetLhbaProperties()  API.
744*
745*******************************************************************************
746*/
747typedef struct _IMA_LHBA_PROPERTIES
748{
749    IMA_WCHAR   osDeviceName[256];
750    IMA_BOOL    luExposingSupported;
751    IMA_BOOL    isDestroyable;
752
753    IMA_BOOL    staleDataRemovable;
754    IMA_UINT    staleDataSize;
755
756    IMA_BOOL    initiatorAuthMethodsSettable;
757    IMA_BOOL    targetAuthMethodsSettable;
758
759    IMA_BYTE    reserved[128];
760} IMA_LHBA_PROPERTIES;
761
762
763
764/**
765*******************************************************************************
766*
767* Declaration of the IMA_ULP_xxx constants
768*
769*******************************************************************************
770*/
771#define IMA_ULP_TCP             0x01
772#define IMA_ULP_SCTP            0x02
773#define IMA_ULP_UDP             0x04
774
775
776
777/**
778*******************************************************************************
779*
780* Declaration of the IMA_MIN_MAX_VALUE structure
781*
782* Note: If the 'currentValueValid' field is IMA_FALSE then the value of
783*       'settable' must also be set to IMA_FALSE.
784*
785* Note: The fields in this structure contain values which are defined by the
786*       implementation and not by the iSCSI specification.  It is possible
787*       that an implementation may be more or less restrictive in the values
788*       that it can accept than the iSCSI specification allows.
789*
790* Note: An example of how to use 'incrementValue': Suppose that a structure is
791*       obtained where 'currentValueValid' is IMA_TRUE, 'settable' is
792*       IMA_TRUE, 'currentValue' is 50, 'defaultValue' is 50, 'minimumValue'
793*       is 30, 'maximumValue' is 70 and 'incrementValue' is 10.  In this case,
794*       the possible values that the property can be set to are 30, 40, 50,
795*       60, and 70.  The new value must be the current value plus or minus
796*       some multiple of 'incrementValue'.
797*
798*******************************************************************************
799*/
800typedef struct _IMA_MIN_MAX_VALUE
801{
802    /**
803    * A boolean indicating if the @a currentValue field contains a valid value.
804    */
805    IMA_BOOL        currentValueValid;
806
807    /**
808    * Indicates if the corresponding property is settable.  If this field
809    * has the value IMA_TRUE then the 'defaultValue', 'minimumValue',
810    * 'maximumValue', and 'incrementValue' fields shall contain valid
811    * values.  If this field has the value IMA_FALSE then these fields
812    * have undefined values.
813    */
814    IMA_BOOL        settable;
815
816    /**
817    * If currentValueValid has the value IMA_TRUE then this field contains
818    * the current value of the associated property.  If 'currentValueValid' has
819    * the value IMA_FALSE then the value of this field is undefined.
820    */
821    IMA_UINT32      currentValue;
822
823    /**
824    * If 'settable' has the value IMA_TRUE then this field contains the
825    * implementation's default value of the associated property.  If 'settable'
826    * has the value IMA_FALSE then the value of this field is undefined.
827    */
828    IMA_UINT32      defaultValue;
829
830    /**
831    * If 'settable' has the value IMA_TRUE then this field contains the
832    * implementation's minimum value of the associated property.  If 'settable'
833    * has the value IMA_FALSE then the value of this field is undefined.
834    */
835    IMA_UINT32      minimumValue;
836
837    /**
838    * If 'settable' has the value IMA_TRUE then this field contains the
839    * implementation's maximum value of the associated property.  If 'settable'
840    * has the value IMA_FALSE then the value of this field is undefined.
841    */
842    IMA_UINT32      maximumValue;
843
844    /**
845    * If 'settable' has the value IMA_TRUE then this field contains a value
846    * which can be added to or subtracted from 'currentValue' to obtain other
847    * possible values of the associated property. If 'settable' has the value
848    * IMA_FALSE then the value of this field is undefined.
849    */
850    IMA_UINT32      incrementValue;
851
852} IMA_MIN_MAX_VALUE;
853
854typedef struct _IMA_BOOL_VALUE
855{
856    IMA_BOOL    currentValueValid;
857    IMA_BOOL    settable;
858    IMA_BOOL    currentValue;
859    IMA_BOOL    defaultValue;
860} IMA_BOOL_VALUE;
861
862/**
863*******************************************************************************
864*
865* Declaration of the IMA_PHBA_PROPERTIES structure
866*
867* This structure is returned by the IMA_GetPhbaProperties() API.
868*
869* Note: Both 'isInitiator' and 'isTarget' cannot be set to IMA_FALSE as this
870*       would mean that the PHBA was not functioning as either an initiator or
871*       target, which means that its not functioning at all.
872*
873*******************************************************************************
874*/
875typedef struct _IMA_PHBA_PROPERTIES
876{
877    /**
878    * A nul terminated ASCII string which contains the name of the vendor
879    * of a PHBA. If the first character in this field is nul then the
880    * vendor is unknown.
881    */
882    IMA_WCHAR       vendor[64];
883
884    /**
885    * A nul terminated ASCII string which contains the name of the model of
886    * a PHBA. If the first character in this field is nul then the model is
887    * unknown.
888    */
889    IMA_WCHAR       model[256];
890
891    /**
892    * A nul terminated ASCII string which contains a description of a PHBA.
893    * This is a user friendly description of the PHBA.  If the first character
894    * in this field is nul then there is no description.
895    */
896    IMA_WCHAR       description[256];
897
898    /**
899    * A nul terminated ASCII string which contains the serial number of a
900    * PHBA.  If the first character in this field is nul then the serial
901    * number is unknown.
902    */
903    IMA_WCHAR       serialNumber[64];
904
905    /**
906    * A nul terminated ASCII string which contains the hardware version of
907    * a PHBA. If the first character in this field is nul then the hardware
908    * version is unknown.
909    */
910    IMA_WCHAR       hardwareVersion[256];
911
912    /**
913    * A nul terminated ASCII string which contains the ASIC version of a
914    * PHBA.  If the first character in this field is nul then the ASIC
915    * version is unknown or is not applicable.
916    */
917    IMA_WCHAR       asicVersion[256];
918
919    /**
920    * A nul terminated ASCII string which contains the firmware version of
921    * a PHBA.  If the first character in this field is nul then the firmware
922    * version is unknown or is not applicable.
923    */
924    IMA_WCHAR       firmwareVersion[256];
925
926    /**
927    * A nul terminated ASCII string which contains the option ROM version
928    * of a PHBA. If the first character in this field is nul then the option
929    * ROM version is unknown or is not applicable.
930    */
931    IMA_WCHAR       optionRomVersion[256];
932
933    /**
934    * A nul terminated ASCII string which contains the name of the driver
935    * controlling a PHBA.  If the first character in this field is nul then
936    * the name of the driver is unknown.
937    */
938    IMA_WCHAR       driverName[256];
939
940    /**
941    * A nul terminated ASCII string which contains the version of the driver
942    * specified in 'driverName'.  If the first character in this field is nul
943    * then the version of the driver is unknown.
944    *
945    * This field can have a known value only if @a driverName has a known
946    * value as well.
947    */
948    IMA_WCHAR       driverVersion[256];
949
950    /**
951    * A field containing flags which indicate what upper level protocols
952    * are supported by a PHBA.  Examples of upper level protocols include:
953    *
954    *       - TCP, represented by IMA_ULP_TCP
955    *       - SCTP, represented by IMA_ULP_SCTP
956    *       - UDP, represented by IMA_ULP_UDP
957    */
958    IMA_UINT        supportedUlps;
959
960    /**
961    * A extended boolean which indicates if a PHBA supports executing SCSI
962    * commands which cause bidirectional transfers.
963    *
964    * Note: The value of this field applies to the entire stack:
965    * the hardware, ASIC, firmware, driver, etc.  All must support SCSI
966    * commands which cause bidirectional transfers for this field to be
967    * set to IMA_TRUE.
968    */
969    IMA_XBOOL       bidirectionalTransfersSupported;
970
971    /**
972    * The maximum length, in bytes, of a CDB that can be transferred by
973    * this PHBA.  If this field has a value of zero that indicates that
974    * this value is unknown.
975    *
976    * Note: The value of this field applies to the entire stack:
977    * the hardware, ASIC, firmware, driver, etc.  All must support the
978    * maximum CDB length returned in this field.
979    */
980    IMA_UINT        maximumCdbLength;
981
982    /**
983    * An extended boolean which indicates if a PHBA can also function as
984    * a standard NIC concurrently with functioning as an iSCSI PHBA.
985    */
986    IMA_XBOOL       canBeNic;
987
988    /**
989    * A extended boolean which indicates if a PHBA is functioning as a
990    * standard NIC concurrently with functioning as an iSCSI PHBA.
991    */
992    IMA_XBOOL       isNic;
993
994    /**
995    * An extended boolean indicating if the PHBA is functioning as an
996    * initiator.
997    */
998    IMA_XBOOL       isInitiator;
999
1000    /**
1001    * An extended boolean indicating if the PHBA is functioning as a target.
1002    */
1003    IMA_XBOOL       isTarget;
1004
1005    /**
1006    * An extended boolean indicating if the PHBA is using a TCP offload engine.
1007    *
1008    * Note: This value should only be set to @c IMA_TRUE if a TCP offload
1009    * engine is present and is being used.  If it can be determined that a
1010    * TCP offload engine is present, but it cannot be determined if that
1011    * offload engine is being used then this value should be set to
1012    * IMA_UNKNOWN.
1013    */
1014    IMA_XBOOL       usingTcpOffloadEngine;
1015
1016    /**
1017    * An extended boolean indicating if the PHBA is using a iSCSI offload
1018    * engine.
1019    *
1020    * Note: This value should only be set to @c IMA_TRUE if a iSCSI offload
1021    * engine is present and is being used.  If it can be determined that an
1022    * iSCSI offload engine is present, but it cannot be determined if that
1023    * offload engine is being used then this value should be set to
1024    * IMA_UNKNOWN.
1025    */
1026    IMA_XBOOL       usingIscsiOffloadEngine;
1027
1028    IMA_BYTE        reserved[128];
1029
1030} IMA_PHBA_PROPERTIES;
1031
1032/**
1033*******************************************************************************
1034*
1035* Declaration of the IMA_DISCOVERY_PROPERTIES structure
1036*
1037*******************************************************************************
1038*/
1039typedef struct _IMA_DISCOVERY_PROPERTIES
1040{
1041		IMA_BOOL			iSnsDiscoverySettable;
1042		IMA_XBOOL			iSnsDiscoveryEnabled;
1043		IMA_ISNS_DISCOVERY_METHOD   	iSnsDiscoveryMethod;
1044		IMA_HOST_ID			iSnsHost;
1045
1046		IMA_BOOL    			slpDiscoverySettable;
1047		IMA_XBOOL   			slpDiscoveryEnabled;
1048
1049		IMA_BOOL    			staticDiscoverySettable;
1050		IMA_XBOOL   			staticDiscoveryEnabled;
1051
1052		IMA_BOOL    			sendTargetsDiscoverySettable;
1053		IMA_XBOOL   			sendTargetsDiscoveryEnabled;
1054
1055		IMA_BYTE    			reserved[128];
1056} IMA_DISCOVERY_PROPERTIES;
1057
1058
1059typedef struct _IMA_PHBA_DOWNLOAD_PROPERTIES
1060{
1061        IMA_BOOL        isPhbaDownloadFileSupported;
1062        IMA_BOOL        optionRomDownloadSupported;
1063        IMA_BOOL        firmwareDownloadSupported;
1064
1065        IMA_BYTE        reserved[32];
1066} IMA_PHBA_DOWNLOAD_PROPERTIES;
1067
1068typedef struct _IMA_IPSEC_PROPERTIES
1069{
1070        IMA_BOOL        ipsecSupported;
1071        IMA_BOOL        implementedInHardware;
1072        IMA_BOOL        implementedInSoftware;
1073
1074        IMA_BYTE        reserved[32];
1075
1076} IMA_IPSEC_PROPERTIES;
1077
1078typedef struct _IMA_LNP_PROPERTIES
1079{
1080        IMA_MAC_ADDRESS macAddress;
1081        IMA_BOOL        macAddressSettable;
1082        IMA_BYTE        reserved[32];
1083
1084} IMA_LNP_PROPERTIES;
1085
1086typedef struct _IMA_PNP_PROPERTIES
1087{
1088        IMA_OID         associatedPhbaOid;
1089
1090        IMA_MAC_ADDRESS macAddress;
1091        IMA_BOOL        macAddressSettable;
1092
1093        IMA_UINT        maximumTransferRate;
1094        IMA_UINT        currentTransferRate;
1095
1096        IMA_UINT        maximumFrameSize;
1097
1098        IMA_BYTE        reserved[64];
1099} IMA_PNP_PROPERTIES;
1100
1101typedef struct _IMA_PNP_STATISTICS
1102{
1103        IMA_UINT64      bytesSent;
1104        IMA_UINT32      pdusSent;
1105        IMA_UINT64      bytesReceived;
1106        IMA_UINT32      pdusReceived;
1107
1108} IMA_PNP_STATISTICS;
1109
1110typedef struct _IMA_TARGET_PROPERTIES
1111{
1112        IMA_OID associatedNodeOid;
1113        IMA_OID associatedLhbaOid;
1114
1115        IMA_NODE_NAME   name;
1116        IMA_NODE_ALIAS  alias;
1117        IMA_UINT32      discoveryMethodFlags;
1118
1119        IMA_BOOL        sendTargetsDiscoverySettable;
1120        IMA_BOOL        sendTargetsDiscoveryEnabled;
1121
1122        IMA_BYTE        reserved[128];
1123
1124} IMA_TARGET_PROPERTIES;
1125
1126typedef struct _IMA_CONNECTION_PROPERTIES
1127{
1128	IMA_OID	associatedSessionOid;
1129	IMA_UINT16	connectionId;
1130	IMA_DIGEST_TYPE	dataDigest;
1131	IMA_DIGEST_TYPE	headerDigest;
1132	IMA_BOOL	ifMarker;
1133	IMA_UINT32	ifMarkInt;
1134	IMA_UINT32	maxRecvDataSegmentLength;
1135	IMA_UINT32	maxTransmitDataSegmentLength;
1136	IMA_BOOL	ofMarker;
1137	IMA_UINT32	ofMarkInt;
1138} IMA_CONNECTION_PROPERTIES;
1139
1140
1141typedef struct _IMA_SESSION_PROPERTIES
1142{
1143	IMA_OID	associatedLhbaOid;
1144	IMA_AUTHMETHOD	authMethod;
1145	IMA_BOOL	dataPduInOrder;
1146	IMA_BOOL	dataSequenceInOrder;
1147	IMA_UINT16	defaultTime2Retain;
1148	IMA_UINT16	defaultTime2Wait;
1149	IMA_UINT16	errorRecoveryLevel;
1150	IMA_UINT32	firstBurstLength;
1151	IMA_BOOL	immediateData;
1152	IMA_BOOL	initialR2T;
1153	IMA_BYTE	isid[6];
1154	IMA_UINT32	maxBurstLength;
1155	IMA_UINT16	maxConnections;
1156	IMA_UINT16	maxOutstandingR2T;
1157	IMA_UINT16	targetPortalGroupTag;
1158	IMA_UINT16	tsih;
1159} IMA_SESSION_PROPERTIES;
1160
1161
1162typedef struct _IMA_TARGET_ERROR_STATISTICS
1163{
1164        IMA_BOOL        loginFailedCountValid;
1165        IMA_UINT32      loginFailedCount;
1166
1167        IMA_BOOL        sessionFailedCountValid;
1168        IMA_UINT32      sessionFailedCount;
1169
1170        IMA_BOOL        headerOrDigestSessionFailedCountValid;
1171        IMA_UINT32      headerOrDigestSessionFailedCount;
1172
1173        IMA_BOOL        timeLimitExceededSessionFailedCountValid;
1174        IMA_UINT32      timeLimitExceededSessionFailedCount;
1175
1176        IMA_BOOL        formatErrorSessionFailedCountValid;
1177        IMA_UINT32      formatErrorSessionFailedCount;
1178
1179        IMA_BOOL        closedConnectionDueToTimeoutCountValid;
1180        IMA_UINT32      closedConnectionDueToTimeoutCount;
1181
1182        IMA_BOOL        lastLoginFailureTimeValid;
1183        IMA_DATETIME    lastLoginFailureTime;
1184
1185        IMA_BYTE        reserved[64];
1186
1187} IMA_TARGET_ERROR_STATISTICS;
1188
1189typedef struct _IMA_LU_PROPERTIES
1190{
1191        IMA_OID         associatedTargetOid;
1192        IMA_UINT64      targetLun;
1193
1194        IMA_BOOL        exposedToOs;
1195        IMA_DATETIME    timeExposedToOs;
1196
1197        IMA_BOOL        osDeviceNameValid;
1198        IMA_WCHAR       osDeviceName[64];
1199
1200        IMA_BOOL        osParallelIdsValid;
1201        IMA_UINT32      osBusNumber;
1202        IMA_UINT32      osTargetId;
1203        IMA_UINT32      osLun;
1204
1205        IMA_BYTE        reserved[128];
1206
1207} IMA_LU_PROPERTIES;
1208
1209typedef struct _IMA_STATISTICS_PROPERTIES
1210{
1211        IMA_BOOL        statisticsCollectionSettable;
1212        IMA_BOOL        statisticsCollectionEnabled;
1213
1214} IMA_STATISTICS_PROPERTIES;
1215
1216typedef struct _IMA_DEVICE_STATISTICS
1217{
1218        IMA_UINT64      scsiPayloadBytesSent;
1219        IMA_UINT64      scsiPayloadBytesReceived;
1220
1221        IMA_UINT64      iScsiPduBytesSent;
1222        IMA_UINT64      iScsiPduBytesReceived;
1223
1224        IMA_UINT64      iScsiPdusSent;
1225        IMA_UINT64      iScsiPdusReceived;
1226
1227        IMA_UINT64      millisecondsSpentSending;
1228        IMA_UINT64      millisecondsSpentReceiving;
1229
1230} IMA_DEVICE_STATISTICS;
1231
1232typedef struct _IMA_NETWORK_PORTAL_PROPERTIES
1233{
1234        IMA_IP_ADDRESS  ipAddress;
1235        IMA_OID         associatedLnp;
1236
1237        IMA_BYTE        reserved[32];
1238} IMA_NETWORK_PORTAL_PROPERTIES;
1239
1240typedef void (* IMA_OBJECT_VISIBILITY_FN)(
1241        IMA_BOOL        becomingVisible,
1242        IMA_OID         oid
1243);
1244
1245typedef void (* IMA_OBJECT_PROPERTY_FN)(
1246        IMA_OID         oid
1247);
1248
1249typedef struct _IMA_CHAP_INITIATOR_AUTHPARMS
1250{
1251
1252        IMA_UINT        retries;
1253
1254        IMA_BYTE        name[512];
1255        IMA_UINT        nameLength;
1256
1257        IMA_UINT        minValueLength;
1258        IMA_UINT        maxValueLength;
1259
1260        IMA_BYTE        challengeSecret[256];
1261        IMA_UINT        challengeSecretLength;
1262
1263        IMA_BYTE        reserved[512];
1264
1265} IMA_CHAP_INITIATOR_AUTHPARMS;
1266
1267typedef struct _IMA_SRP_INITIATOR_AUTHPARMS
1268{
1269
1270        IMA_BYTE        userName[512];
1271        IMA_UINT        userNameLength;
1272
1273        IMA_BYTE        reserved[512];
1274
1275} IMA_SRP_INITIATOR_AUTHPARMS;
1276
1277typedef struct _IMA_KRB5_INITIATOR_AUTHPARMS
1278{
1279
1280        IMA_BYTE        clientKey[1024];
1281        IMA_UINT        clientKeyLength;
1282
1283        IMA_BYTE        reserved[2048];
1284
1285} IMA_KRB5_INITIATOR_AUTHPARMS;
1286
1287typedef struct _IMA_SPKM_INITIATOR_AUTHPARMS
1288{
1289
1290        IMA_BYTE        privateKey[4096];
1291        IMA_UINT        privateKeyLength;
1292
1293        IMA_BYTE        publicKey[4096];
1294        IMA_UINT        publicKeyLength;
1295
1296        IMA_BYTE        reserved[4096];
1297
1298} IMA_SPKM_INITIATOR_AUTHPARMS;
1299
1300typedef union _IMA_INITIATOR_AUTHPARMS
1301{
1302
1303        IMA_CHAP_INITIATOR_AUTHPARMS    chapParms;
1304        IMA_SRP_INITIATOR_AUTHPARMS     srpParms;
1305        IMA_KRB5_INITIATOR_AUTHPARMS    kerberosParms;
1306        IMA_SPKM_INITIATOR_AUTHPARMS    spkmParms;
1307
1308} IMA_INITIATOR_AUTHPARMS;
1309
1310
1311typedef struct _IMA_STATIC_DISCOVERY_TARGET
1312{
1313		IMA_NODE_NAME 		targetName;
1314		IMA_TARGET_ADDRESS 	targetAddress;
1315
1316} IMA_STATIC_DISCOVERY_TARGET;
1317
1318typedef struct _IMA_DISCOVERY_ADDRESS_PROPERTIES
1319{
1320		IMA_OID			associatedNodeOid;
1321		IMA_OID			associatedLhbaOid;
1322		IMA_TARGET_ADDRESS	discoveryAddress;
1323
1324} IMA_DISCOVERY_ADDRESS_PROPERTIES;
1325
1326typedef struct _IMA_STATIC_TGT_PROPERTIES
1327{
1328		IMA_OID				associatedNodeOid;
1329		IMA_OID				associatedLhbaOid;
1330		IMA_STATIC_DISCOVERY_TARGET	staticTarget;
1331
1332} IMA_STATIC_DISCOVERY_TARGET_PROPERTIES;
1333
1334typedef struct ima_plugin_info {
1335	char PluginName[64];
1336        char PluginPath[256];
1337#ifdef WIN32
1338	HINSTANCE hPlugin; /* Handle to a loaded DLL */
1339#else
1340	void* hPlugin; /* Handle to a loaded DLL */
1341#endif
1342	IMA_UINT32 ownerId;
1343#ifdef WIN32
1344	HANDLE pluginMutex;
1345#else
1346	int pluginMutex;
1347#endif
1348	IMA_UINT number_of_vbcallbacks;
1349        IMA_OBJECT_VISIBILITY_FN vbcallback[IMA_MAX_CALLBACK_PER_PLUGIN];
1350        IMA_UINT number_of_pccallbacks;
1351        IMA_OBJECT_PROPERTY_FN pccallback[IMA_MAX_CALLBACK_PER_PLUGIN];
1352} IMA_PLUGIN_INFO, *PIMA_PLUGIN_INFO;
1353
1354
1355/**
1356*******************************************************************************
1357*
1358* The individual APIs of the IMA are declared below.
1359*
1360*******************************************************************************
1361*/
1362
1363/**
1364*******************************************************************************
1365*
1366* Gets the properties of the IMA library that is being used.
1367*
1368* @param  pProps
1369*         A pointer to an IMA_LIBRARY_PROPERTIES structure allocated by
1370*         the caller.  On successful return this structure will contain the
1371*         properties of the IMA library.
1372*
1373* @return An IMA_STATUS indicating if the operation was successful or if
1374*         an error occurred.
1375*
1376* @retval IMA_SUCCESS
1377*         Returned if the library properties were successfully returned.
1378*
1379* @retval IMA_ERROR_INVALID_PARAMETER
1380*         Returned if 'pProps' is NULL or specifies a memory area to which
1381*         data cannot be written.
1382*
1383*******************************************************************************
1384*/
1385IMA_API IMA_STATUS IMA_GetLibraryProperties(
1386        IMA_LIBRARY_PROPERTIES *pProps
1387);
1388
1389
1390
1391/**
1392*******************************************************************************
1393*
1394* Gets a list of the object IDs of all currently loaded plugins.
1395*
1396* @param ppList
1397*        A pointer to a pointer to an IMA_OID_LIST.  On successful
1398*        return this will contain a pointer to an @ref IMA_OID_LIST
1399*        which contains the object IDs of all of the plugins currently
1400*        loaded by the library.
1401*
1402* @return An IMA_STATUS indicating if the operation was successful or
1403*         if an error occurred.
1404*
1405* @retval IMA_SUCCESS
1406*         Returned if the plugin ID list was successfully returned.
1407*
1408* @retval IMA_ERROR_INVALID_PARAMETER
1409*         Returned if 'ppList' is NULL or specifies a memory area to
1410*         which data cannot be written.
1411*
1412*******************************************************************************
1413*/
1414IMA_API IMA_STATUS IMA_GetPluginOidList(
1415        IMA_OID_LIST **ppList
1416);
1417
1418
1419
1420/**
1421*******************************************************************************
1422*
1423* Gets the properties of the specified vendor plugin.
1424*
1425* @param  pluginOid
1426*         The ID of the plugin whose properties are being retrieved.
1427*
1428* @param  pProps
1429*         A pointer to an @ref IMA_PLUGIN_PROPERTIES structure allocated by
1430*         the caller.  On successful return this will contain the properties
1431*         of the plugin specified by pluginOid.
1432*
1433* @return An IMA_STATUS indicating if the operation was successful or if an
1434*         error occurred.
1435*
1436* @retval IMA_SUCCESS
1437*         Returned if the plugin properties were successfully returned.
1438*
1439* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1440*         Returned if 'pluginOid' does not specify any valid object type.
1441*
1442* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1443*         Returned if 'pluginOid' does not specify a plugin object.
1444*
1445* @retval IMA_ERROR_OBJECT_NOT_FOUND
1446*         Returned if 'pluginOid' refers to a plugin, but not one that
1447*         is currently loaded.
1448* @retval IMA_ERROR_INVALID_PARAMETER
1449*         Returned if 'pProps' is NULL or specifies a memory area to
1450*         which data cannot be written.
1451*
1452*******************************************************************************
1453*/
1454IMA_API IMA_STATUS IMA_GetPluginProperties(
1455        IMA_OID pluginOid,
1456        IMA_PLUGIN_PROPERTIES *pProps
1457);
1458
1459
1460
1461/**
1462*******************************************************************************
1463*
1464* Gets the object ID for the plugin associated with the specified object ID.
1465*
1466* @param  oid
1467*         The object ID of an object that has been received from a previous
1468*         library call.
1469*
1470* @param  pPluginOid
1471*         A pointer to an IMA_OID structure allocated by the caller.  On
1472*         successful return this will contain the object ID of the plugin
1473*         associated with the object specified by @a objectId.  This
1474*         can then be used to work with the plugin, e.g., to get the
1475*         properties of the plugin or the send the plugin an IOCtl.
1476*
1477* @return An IMA_STATUS indicating if the operation was successful or if
1478*         an error occurred.
1479*
1480* @retval IMA_SUCCESS
1481*         Returned if the associated plugin ID was successfully returned.
1482*
1483* @retval IMA_ERROR_INVALID_PARAMETER
1484*         Returned if 'pPluginOid' is NULL or specifies a memory area to
1485*         which data cannot be written.
1486*
1487* @retval IMA_ERROR_INVALID_PARAMETER
1488*         Returned if 'oid' specifies an object not owned by a plugin, but
1489*         instead one that is owned by the library.
1490*
1491* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1492*         Returned if 'oid' specifies an object with an invalid type.
1493*
1494*******************************************************************************
1495*/
1496IMA_API IMA_STATUS IMA_GetAssociatedPluginOid(
1497        IMA_OID oid,
1498        IMA_OID *pPluginOid
1499);
1500
1501
1502
1503/**
1504*******************************************************************************
1505*
1506* Gets the object ID of the shared node.
1507*
1508* @param  pSharedNodeOid
1509*         A pointer to an IMA_OID structure allocated by the caller.  On
1510*         successful return it will contain the object ID of the
1511*         shared node of the currently executing system is placed.
1512*
1513* @return An IMA_STATUS indicating if the operation was successful or
1514*         if an error occurred.
1515*
1516* @retval IMA_SUCCESS
1517*         Returned if the shared node ID has been successfully retrieved.
1518*
1519* @retval IMA_ERROR_INVALID_PARAMETER
1520*         Returned if 'pSharedNodeOid' is NULL or specifies a memory area
1521*         to which data cannot be written.
1522*
1523*******************************************************************************
1524*/
1525IMA_API IMA_STATUS IMA_GetSharedNodeOid(
1526        IMA_OID *pSharedNodeOid
1527);
1528
1529IMA_API IMA_STATUS IMA_GetObjectType(
1530        IMA_OID oid,
1531        IMA_OBJECT_TYPE *pObjectType
1532);
1533
1534
1535/**
1536*******************************************************************************
1537*
1538* Gets the properties of the specified iSCSI node.
1539*
1540* @param  nodeOid
1541*         The ID of the node to get the properties of.
1542*
1543* @param  pProps
1544*         A pointer to an @ref IMA_NODE_PROPERTIES structure which on
1545*         successful return will contain the properties of the specified node.
1546*
1547* @return An IMA_STATUS indicating if the operation was successful or if
1548*         an error occurred.
1549*
1550* @retval IMA_SUCCESS
1551*         Returned if the node properties have been successfully retrieved.
1552*
1553* @retval IMA_ERROR_INVALID_PARAMETER
1554*         Returned if 'pProps' is NULL or specifies a memory area to which
1555*         data cannot be written.
1556*
1557* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1558*         Returned if 'nodeOid' does not specify any valid object type.
1559*
1560* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1561*         Returned if 'nodeOid' does not specify a node object.
1562*
1563* @retval IMA_ERROR_OBJECT_NOT_FOUND
1564*         Returned if 'nodeOid' does not specify a node which is currently
1565*         known to the system.
1566*
1567*******************************************************************************
1568*/
1569IMA_API IMA_STATUS IMA_GetNodeProperties(
1570        IMA_OID nodeOid,
1571        IMA_NODE_PROPERTIES *pProps
1572);
1573
1574
1575
1576/**
1577*******************************************************************************
1578*
1579* Sets the name of the specified node.
1580*
1581* @param  nodeOid
1582*         The object ID of the node whose name is being set.
1583*
1584* @param  newName
1585*         The new name of the node.
1586*
1587* @return An IMA_STATUS indicating if the operation was successful or
1588*         if an error occurred.
1589*
1590* @retval IMA_SUCCESS
1591*         Returned if the node name was successfully changed.
1592*
1593* @retval IMA_STATUS_REBOOT_NECESSARY
1594*         Returned if a reboot is necessary before the setting of the
1595*         name actually takes affect.
1596*
1597* @retval IMA_ERROR_INVALID_PARAMETER
1598*         Returned if 'newName' is NULL, or specifies a memory area
1599*         to which data cannot be written, or has a length of 0.
1600*
1601* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1602*         Returned if 'nodeOid' does not specify any valid object type.
1603*
1604* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1605*         Returned if 'nodeOid' does not specify a node object.
1606*
1607* @retval IMA_ERROR_OBJECT_NOT_FOUND
1608*         Returned if 'nodeOid' does not specify a node which is
1609*         currently known to the system.
1610*
1611* @retval IMA_ERROR_NAME_TOO_LONG
1612*         Returned if 'newName' contains too many characters.
1613*
1614*******************************************************************************
1615*/
1616IMA_API IMA_STATUS IMA_SetNodeName(
1617        IMA_OID nodeOid,
1618        const IMA_NODE_NAME newName
1619);
1620
1621
1622
1623/**
1624*******************************************************************************
1625*
1626* Generates a unique node name for the currently running system.
1627*
1628* @param  generatedName
1629*         On successful return contains the generated node name.
1630*
1631* @return  An IMA_STATUS indicating if the operation was successful or if an
1632*          error occurred.
1633*
1634* @retval IMA_ERROR_INVALID_PARAMETER
1635*         Returned if 'generatedname is NULL or
1636*               specifies a memory area to which data cannot be written.
1637*
1638*******************************************************************************
1639*/
1640IMA_API IMA_STATUS IMA_GenerateNodeName(
1641        IMA_NODE_NAME generatedName
1642);
1643
1644
1645
1646/**
1647*******************************************************************************
1648*
1649* Sets the alias of the specified node.
1650*
1651* @param  nodeOid
1652*         The object ID of the node whose alias is being set.
1653*
1654* @param  newAlias
1655*         A pointer to a Unicode string which contains the new node alias.
1656*         If this parameter is NULL then the current alias is deleted, in which
1657*         case the specified node no longer has an alias.
1658*
1659* @return An IMA_STATUS indicating if the operation was successful or
1660*         if an error occurred.
1661*
1662* @retval IMA_SUCCESS
1663*         Returned if the node's alias has been successfully set.
1664*
1665* @retval IMA_STATUS_REBOOT_NECESSARY
1666*         A reboot is necessary before the setting of the alias actually
1667*         takes effect.
1668*
1669* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1670*         Returned if 'nodeOid' does not specify any valid object type.
1671*
1672* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1673*         Returned if 'nodeOid' does not specify a node object.
1674*
1675* @retval IMA_ERROR_OBJECT_NOT_FOUND
1676*         Returned if 'nodeOid' does not specify a node which is currently
1677*         known to the system.
1678*
1679* @retval IMA_ERROR_NAME_TOO_LONG
1680*         Returned if 'newAlias' contains too many characters.
1681*
1682*******************************************************************************
1683*/
1684IMA_API IMA_STATUS IMA_SetNodeAlias(
1685        IMA_OID nodeOid,
1686        const IMA_NODE_ALIAS newAlias
1687);
1688
1689
1690
1691/**
1692*******************************************************************************
1693*
1694* Gets a list of the object IDs of all the logical HBAs in the system.
1695*
1696* @param  ppList
1697*         A pointer to a pointer to an @ref IMA_OID_LIST structure.  On
1698*         successful return this will contain a pointer to an
1699*         IMA_OID_LIST which contains the object IDs of all of the
1700*         LHBAs currently in the system.
1701*
1702* @return An IMA_STATUS indicating if the operation was successful or if
1703*         an error occurred.
1704*
1705* @retval IMA_SUCCESS
1706*         Returned if the LHBA ID list has been successfully returned.
1707*
1708* @retval IMA_ERROR_INVALID_PARAMETER
1709*         Returned if 'ppList' is NULL or specifies a memory area to which
1710*         data cannot be written.
1711*
1712*******************************************************************************
1713*/
1714IMA_API IMA_STATUS IMA_GetLhbaOidList(
1715        IMA_OID_LIST **ppList
1716);
1717
1718
1719
1720/**
1721*******************************************************************************
1722*
1723* Gets the properties of the specified logical HBA.
1724*
1725* @param  lhbaOid
1726*         The object ID of the LHBA whose properties are being retrieved.
1727*
1728* @param  pProps
1729*         A pointer to an IMA_LHBA_PROPERTIES structure.  On successful
1730*         return this will contain the properties of the LHBA specified by
1731*         'lhbaOid'.
1732*
1733* @return An IMA_STATUS indicating if the operation was successful or if
1734*         an error occurred.
1735*
1736* @retval IMA_SUCCESS
1737*         Returned if the properties of the specified LHBA have been
1738*         successfully retrieved.
1739*
1740* @retval IMA_ERROR_INVALID_PARAMETER
1741*         Returned if 'pProps' is NULL or specifies a memory area to which
1742*         data cannot be written.
1743*
1744* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1745*         Returned if 'lhbaOid' does not specify any valid object type.
1746*
1747* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1748*         Returned if 'lhbaOid' does not specify a LHBA.
1749*
1750* @retval IMA_ERROR_OBJECT_NOT_FOUND
1751*         Returned if 'lhbaOid' does not specify a LHBA which is currently
1752*         known to the system.
1753*
1754*******************************************************************************
1755*/
1756IMA_API IMA_STATUS IMA_GetLhbaProperties(
1757        IMA_OID lhbaOid,
1758        IMA_LHBA_PROPERTIES *pProps
1759);
1760
1761
1762
1763/**
1764*******************************************************************************
1765*
1766* Gets a list of the object IDs of all the physical HBAs in the system.
1767*
1768* @param  ppList
1769*         A pointer to a pointer to an IMA_OID_LIST structure.  On successful
1770*         return this will contain a pointer to an IMA_OID_LIST which
1771*         contains the object IDs of all of the PHBAs currently in the system.
1772*
1773* @return An IMA_STATUS indicating if the operation was successful or if
1774*         an error occurred.
1775*
1776* @retval IMA_SUCCESS
1777*         Returned if the PHBA OID list has been successfully returned.
1778*
1779* @retval IMA_ERROR_INVALID_PARAMETER
1780*         Returned if 'ppList' is NULL or specifies a memory area to which
1781*         data cannot be written.
1782*
1783*******************************************************************************
1784*/
1785IMA_API IMA_STATUS IMA_GetPhbaOidList(
1786        IMA_OID_LIST **ppList
1787);
1788
1789
1790
1791/**
1792*******************************************************************************
1793*
1794* Gets the general properties of a physical HBA.
1795*
1796* @param  phbaOid
1797*         The object ID of the PHBA whose properties are being queried.
1798*
1799* @param  pProps
1800*         A pointer to an @ref IMA_PHBA_PROPERTIES structure.  On successful
1801*         return this will contain the properties of the PHBA specified by
1802*         'phbaOid'.
1803#
1804* @return An IMA_STATUS indicating if the operation was successful or
1805*         if an error occurred.
1806*
1807* @retval IMA_SUCCESS
1808*         Returned if the properties of the specified PHBA have been
1809*         successfully retrieved.
1810*
1811* @retval IMA_ERROR_INVALID_PARAMETER
1812*         Returned if 'pProps' is NULL or specifies a memory area to which
1813*         data cannot be written.
1814*
1815* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1816*         Returned if 'phbaOid' does not specify any valid object type.
1817*
1818* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1819*         Returned if 'phbaOid' does not specify a PHBA.
1820*
1821* @retval IMA_ERROR_OBJECT_NOT_FOUND
1822*         Returned if 'phbaOid' does not specify a PHBA which is currently
1823*         known to the system.
1824*
1825*******************************************************************************
1826*/
1827IMA_API IMA_STATUS IMA_GetPhbaProperties(
1828        IMA_OID phbaOid,
1829        IMA_PHBA_PROPERTIES *pProps
1830);
1831
1832/**
1833*******************************************************************************
1834*
1835* Frees a previously allocated IMA_OID_LIST structure.
1836*
1837* @param pMemory  A pointer to an IMA_OID_LIST structure allocated by the
1838*                 library.  On successful return the memory allocated by the
1839*                 list is freed.
1840* @return  An IMA_STATUS indicating if the operation was successful or if an
1841*          error occurred.
1842* @retval IMA_SUCCESS
1843*         Returned if the specified object ID list was successfully
1844*         freed.
1845* @retval IMA_ERROR_INVALID_PARAMETER
1846*         Returned if pMemory is NULL or specifies a memory area from which
1847*         data cannot be read.
1848*
1849*******************************************************************************
1850*/
1851IMA_API IMA_STATUS IMA_FreeMemory(
1852        void *pMemory
1853);
1854
1855
1856
1857IMA_API IMA_STATUS IMA_GetNonSharedNodeOidList(
1858                IMA_OID_LIST **ppList
1859);
1860
1861
1862
1863
1864/**
1865*******************************************************************************
1866*
1867* Gets the first burst length properties of the specified logical HBA.
1868*
1869* @param  oid
1870*         The object ID of the logical HBA to get the first burst length
1871*         properties of.
1872*
1873* @param  pProps
1874*         A pointer to a min/max values structure.
1875*
1876* @return An IMA_STATUS indicating if the operation was successful or if an
1877*         error occurred.
1878*
1879* @retval IMA_SUCCESS
1880*         Returned if the first burst length properties have been
1881*         successfully retrieved.
1882*
1883* @retval IMA_ERROR_INVALID_PARAMETER
1884*         Returned if pProps is NULL or specifies a memory area to which
1885*         data cannot be written.
1886*
1887* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1888*         Returned if 'oid' does not specify any valid object type.
1889*
1890* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1891*         Returned if 'oid' does not specify a LHBA.
1892*
1893* @retval IMA_ERROR_OBJECT_NOT_FOUND
1894*         Returned if 'oid' does not specify a LHBA which is currently
1895*         known to the system.
1896*
1897*******************************************************************************
1898*/
1899IMA_API IMA_STATUS IMA_GetFirstBurstLengthProperties(
1900                IMA_OID oid,
1901                IMA_MIN_MAX_VALUE *pProps
1902);
1903
1904
1905/**
1906*******************************************************************************
1907*
1908* Gets the max burst length properties of the specified logical HBA.
1909*
1910* @param  oid
1911*         The object ID of the logical HBA to get the max burst length
1912*         properties of.
1913*
1914* @param  pProps
1915*         A pointer to an IMA_MIN_MAX_VALUE structure allocated by the
1916*         caller.  On successful return this structure will contain the max
1917*         burst length properties of this LHBA.
1918*
1919* @return An IMA_STATUS indicating if the operation was successful or if
1920*         an error occurred.
1921*
1922* @retval IMA_SUCCESS
1923*         Returned if the max burst length properties have been successfully
1924*         retrieved.
1925*
1926* @retval IMA_ERROR_INVALID_PARAMETER
1927*         Returned if pProps is NULL or specifies a memory area to which
1928*         data cannot be written.
1929*
1930* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1931*         Returned if 'oid' does not specify any valid object type.
1932*
1933* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1934*         Returned if 'oid' does not specify a LHBA.
1935*
1936* @retval IMA_ERROR_OBJECT_NOT_FOUND
1937*         Returned if 'oid' does not specify a LHBA which is currently
1938*         known to the system.
1939*
1940*******************************************************************************
1941*/
1942IMA_API IMA_STATUS IMA_GetMaxBurstLengthProperties(
1943                IMA_OID Oid,
1944                IMA_MIN_MAX_VALUE *pProps
1945);
1946
1947/**
1948*******************************************************************************
1949*
1950* Gets the maximum receive data segment length properties of the specified
1951* logical HBA.
1952*
1953* @param  oid
1954*         The object ID of the logical HBA to get the max receive data
1955*         segment length properties of.
1956*
1957* @param  pProps
1958*         A pointer to an @ref IMA_MIN_MAX_VALUE structure allocated by the
1959*         caller.  On successful return this structure will contain the max
1960*         receive data segment length properties of this LHBA.
1961*
1962* @return An IMA_STATUS indicating if the operation was successful or if
1963*         an error occurred.
1964*
1965* @retval IMA_SUCCESS
1966*         Returned if the max receive data segment length properties
1967*         have been successfully retrieved.
1968*
1969* @retval IMA_ERROR_INVALID_PARAMETER
1970*         Returned if 'pProps' is NULL or specifies a memory area to which
1971*         data cannot be written.
1972*
1973* @retval IMA_ERROR_INVALID_OBJECT_TYPE
1974*         Returned if 'oid' does not specify any valid object type.
1975*
1976* @retval IMA_ERROR_INCORRECT_OBJECT_TYPE
1977*         Returned if 'oid' does not specify a LHBA.
1978*
1979* @retval IMA_ERROR_OBJECT_NOT_FOUND
1980*         Returned if 'oid' does not specify a LHBA which is currently
1981*         known to the system.
1982*
1983*******************************************************************************
1984*/
1985IMA_API IMA_STATUS IMA_GetMaxRecvDataSegmentLengthProperties(
1986                IMA_OID oid,
1987                IMA_MIN_MAX_VALUE *pProps
1988);
1989
1990
1991/*---------------------------------------------*/
1992IMA_API IMA_STATUS IMA_PluginIOCtl(
1993                IMA_OID pluginOid,
1994                IMA_UINT command,
1995                const void *pInputBuffer,
1996                IMA_UINT inputBufferLength,
1997                void *pOutputBuffer,
1998                IMA_UINT *pOutputBufferLength
1999);
2000
2001
2002
2003IMA_API IMA_STATUS IMA_GetNetworkPortalOidList(
2004                IMA_OID oid,
2005                IMA_OID_LIST **ppList
2006);
2007
2008IMA_API IMA_STATUS IMA_SetFirstBurstLength(
2009                IMA_OID oid,
2010                IMA_UINT firstBurstLength
2011);
2012
2013IMA_API IMA_STATUS IMA_SetMaxBurstLength(
2014                IMA_OID oid,
2015                IMA_UINT maxBurstLength
2016);
2017
2018IMA_API IMA_STATUS IMA_SetMaxRecvDataSegmentLength(
2019                IMA_OID oid,
2020                IMA_UINT maxRecvDataSegmentLength
2021);
2022
2023IMA_API IMA_STATUS IMA_GetMaxConnectionsProperties(
2024                IMA_OID oid,
2025                IMA_MIN_MAX_VALUE *pProps
2026);
2027
2028IMA_API IMA_STATUS IMA_SetMaxConnections(
2029                IMA_OID oid,
2030                IMA_UINT maxConnections
2031);
2032
2033IMA_API IMA_STATUS IMA_GetDefaultTime2RetainProperties(
2034                IMA_OID oid,
2035                IMA_MIN_MAX_VALUE *pProps
2036);
2037
2038IMA_API IMA_STATUS IMA_SetDefaultTime2Retain(
2039                IMA_OID oid,
2040                IMA_UINT defaultTime2Retain
2041);
2042
2043IMA_API IMA_STATUS IMA_GetDefaultTime2WaitProperties(
2044                IMA_OID oid,
2045                IMA_MIN_MAX_VALUE *pProps
2046);
2047
2048IMA_API IMA_STATUS IMA_SetDefaultTime2Wait(
2049                IMA_OID oid,
2050                IMA_UINT defaultTime2Wait
2051);
2052
2053IMA_API IMA_STATUS IMA_GetMaxOutstandingR2TProperties(
2054                IMA_OID oid,
2055                IMA_MIN_MAX_VALUE *pProps
2056);
2057
2058IMA_API IMA_STATUS IMA_SetMaxOutstandingR2T(
2059                IMA_OID oid,
2060                IMA_UINT maxOutstandingR2T
2061);
2062
2063IMA_API IMA_STATUS IMA_GetErrorRecoveryLevelProperties(
2064                IMA_OID oid,
2065                IMA_MIN_MAX_VALUE *pProps
2066);
2067
2068IMA_API IMA_STATUS IMA_SetErrorRecoveryLevel(
2069                IMA_OID oid,
2070                IMA_UINT errorRecoveryLevel
2071);
2072
2073IMA_API IMA_STATUS IMA_GetInitialR2TProperties(
2074                IMA_OID oid,
2075                IMA_BOOL_VALUE *pProps
2076);
2077
2078IMA_API IMA_STATUS IMA_SetInitialR2T(
2079                IMA_OID oid,
2080                IMA_BOOL initialR2T
2081);
2082
2083IMA_API IMA_STATUS IMA_GetImmediateDataProperties(
2084                IMA_OID oid,
2085                IMA_BOOL_VALUE *pProps
2086);
2087
2088IMA_API IMA_STATUS IMA_SetImmediateData(
2089                IMA_OID oid,
2090                IMA_BOOL immediateData
2091);
2092
2093IMA_API IMA_STATUS IMA_GetDataPduInOrderProperties(
2094                IMA_OID oid,
2095                IMA_BOOL_VALUE *pProps
2096);
2097
2098IMA_API IMA_STATUS IMA_SetDataPduInOrder(
2099                IMA_OID oid,
2100                IMA_BOOL dataPduInOrder
2101);
2102
2103IMA_API IMA_STATUS IMA_GetDataSequenceInOrderProperties(
2104                IMA_OID oid,
2105                IMA_BOOL_VALUE *pProps
2106);
2107
2108IMA_API IMA_STATUS IMA_SetDataSequenceInOrder(
2109                IMA_OID oid,
2110                IMA_BOOL dataSequenceInOrder
2111);
2112
2113IMA_API IMA_STATUS IMA_SetStatisticsCollection(
2114                IMA_OID oid,
2115                IMA_BOOL enableStatisticsCollection
2116);
2117
2118IMA_API IMA_STATUS IMA_GetNetworkPortStatus(
2119                IMA_OID portOid,
2120                IMA_NETWORK_PORT_STATUS *pStatus
2121);
2122
2123IMA_API IMA_STATUS IMA_GetTargetOidList(
2124                IMA_OID oid,
2125                IMA_OID_LIST **ppList
2126);
2127
2128IMA_API IMA_STATUS IMA_RemoveStaleData(
2129                IMA_OID lhbaOid
2130);
2131
2132IMA_API	IMA_STATUS IMA_SetIsnsDiscovery(
2133		IMA_OID phbaId,
2134		IMA_BOOL enableIsnsDiscovery,
2135		IMA_ISNS_DISCOVERY_METHOD discoveryMethod,
2136		const IMA_HOST_ID *iSnsHost
2137);
2138
2139IMA_API IMA_STATUS IMA_SetSlpDiscovery(
2140                IMA_OID phbaOid,
2141                IMA_BOOL enableSlpDiscovery
2142);
2143
2144IMA_API IMA_STATUS IMA_SetStaticDiscovery(
2145                IMA_OID phbaOid,
2146                IMA_BOOL enableStaticDiscovery
2147);
2148
2149IMA_API IMA_STATUS IMA_SetSendTargetsDiscovery(
2150                IMA_OID oid,
2151                IMA_BOOL enableSendTargetsDiscovery
2152);
2153
2154IMA_API IMA_STATUS IMA_RemoveStaticDiscoveryTarget(
2155                IMA_OID targetOid
2156);
2157
2158IMA_API IMA_STATUS IMA_GetIpsecProperties(
2159                IMA_OID phbaOid,
2160                IMA_IPSEC_PROPERTIES *pProps
2161);
2162
2163IMA_API IMA_STATUS IMA_GetPnpOidList(
2164                IMA_OID oid,
2165                IMA_OID_LIST **ppList
2166);
2167
2168IMA_API IMA_STATUS IMA_GetPhbaDownloadProperties(
2169                IMA_OID phbaOid,
2170                IMA_PHBA_DOWNLOAD_PROPERTIES *pProps
2171);
2172
2173IMA_API IMA_STATUS IMA_IsPhbaDownloadFile(
2174                IMA_OID phbaOid,
2175                const IMA_WCHAR *pFileName,
2176                IMA_PHBA_DOWNLOAD_IMAGE_PROPERTIES *pProps
2177);
2178
2179IMA_API IMA_STATUS IMA_PhbaDownload(
2180                IMA_OID phbaOid,
2181                IMA_PHBA_DOWNLOAD_IMAGE_TYPE imageType,
2182                const IMA_WCHAR *pFileName
2183);
2184
2185IMA_API IMA_STATUS IMA_GetNetworkPortalProperties(
2186                IMA_OID networkPortalOid,
2187                IMA_NETWORK_PORTAL_PROPERTIES *pProps
2188);
2189
2190IMA_API IMA_STATUS IMA_SetNetworkPortalIpAddress(
2191                IMA_OID networkPortalOid,
2192                const IMA_IP_ADDRESS NewIpAddress
2193);
2194
2195IMA_API IMA_STATUS IMA_GetLnpOidList(
2196                IMA_OID_LIST **ppList
2197);
2198
2199IMA_API IMA_STATUS IMA_GetLnpProperties(
2200                IMA_OID lnpOid,
2201                IMA_LNP_PROPERTIES *pProps
2202);
2203
2204IMA_API IMA_STATUS IMA_GetPnpProperties(
2205                IMA_OID pnpOid,
2206                IMA_PNP_PROPERTIES *pProps
2207);
2208
2209IMA_API IMA_STATUS IMA_GetPnpStatistics(
2210                IMA_OID pnpOid,
2211                IMA_PNP_STATISTICS *pStats
2212);
2213
2214IMA_API IMA_STATUS IMA_GetTargetProperties(
2215                IMA_OID targetOid,
2216                IMA_TARGET_PROPERTIES *pProps
2217);
2218
2219IMA_API IMA_STATUS IMA_GetTargetErrorStatistics(
2220                IMA_OID targetOid,
2221                IMA_TARGET_ERROR_STATISTICS *pStats
2222);
2223
2224IMA_API IMA_STATUS IMA_GetLuOidList(
2225                IMA_OID oid,
2226                IMA_OID_LIST **ppList
2227);
2228
2229IMA_API IMA_STATUS IMA_GetLuOid(
2230                IMA_OID targetOid,
2231                IMA_UINT64 lun,
2232                IMA_OID *pluOid
2233);
2234
2235IMA_API IMA_STATUS IMA_GetLuProperties(
2236                IMA_OID luOid,
2237                IMA_LU_PROPERTIES *pProps
2238);
2239
2240IMA_API IMA_STATUS IMA_GetStatisticsProperties(
2241                IMA_OID oid,
2242                IMA_STATISTICS_PROPERTIES *pProps
2243);
2244
2245IMA_API IMA_STATUS IMA_GetDeviceStatistics(
2246                IMA_OID oid,
2247                IMA_DEVICE_STATISTICS *pStats
2248);
2249
2250IMA_API IMA_STATUS IMA_LuInquiry(
2251                IMA_OID deviceOid,
2252                IMA_BOOL evpd,
2253                IMA_BOOL cmddt,
2254                IMA_BYTE pageCode,
2255
2256                IMA_BYTE *pOutputBuffer,
2257                IMA_UINT *pOutputBufferLength,
2258
2259                IMA_BYTE *pSenseBuffer,
2260                IMA_UINT *pSenseBufferLength
2261);
2262
2263IMA_API IMA_STATUS IMA_LuReadCapacity(
2264                IMA_OID deviceOid,
2265                IMA_UINT cdbLength,
2266                IMA_BYTE *pOutputBuffer,
2267                IMA_UINT *pOutputBufferLength,
2268
2269                IMA_BYTE *pSenseBuffer,
2270                IMA_UINT *pSenseBufferLength
2271);
2272
2273IMA_API IMA_STATUS IMA_LuReportLuns(
2274                IMA_OID deviceOid,
2275                IMA_BOOL sendToWellKnownLun,
2276                IMA_BYTE selectReport,
2277
2278                IMA_BYTE *pOutputBuffer,
2279                IMA_UINT *pOutputBufferLength,
2280
2281                IMA_BYTE *pSenseBuffer,
2282                IMA_UINT *pSenseBufferLength
2283);
2284
2285IMA_API IMA_STATUS IMA_ExposeLu(
2286                IMA_OID luOid
2287);
2288
2289IMA_API IMA_STATUS IMA_UnexposeLu(
2290                IMA_OID luOid
2291);
2292
2293IMA_API IMA_STATUS IMA_GetPhbaStatus(
2294                IMA_OID hbaOid,
2295                IMA_PHBA_STATUS *pStatus
2296);
2297
2298IMA_API IMA_STATUS IMA_RegisterForObjectVisibilityChanges (
2299                IMA_OBJECT_VISIBILITY_FN pClientFn
2300);
2301
2302IMA_API IMA_STATUS IMA_DeregisterForObjectVisibilityChanges (
2303                IMA_OBJECT_VISIBILITY_FN pClientFn
2304);
2305
2306IMA_API IMA_STATUS IMA_RegisterForObjectPropertyChanges (
2307                IMA_OBJECT_PROPERTY_FN pClientFn
2308);
2309
2310IMA_API IMA_STATUS IMA_DeregisterForObjectPropertyChanges (
2311                IMA_OBJECT_PROPERTY_FN pClientFn
2312);
2313
2314
2315IMA_API IMA_STATUS IMA_GetAddressKeyProperties(
2316                IMA_OID targetOid,
2317                IMA_ADDRESS_KEY_PROPERTIES **ppProps
2318);
2319
2320IMA_API IMA_STATUS IMA_GetIpProperties(
2321                IMA_OID oid,
2322                IMA_IP_PROPERTIES *pProps
2323);
2324
2325IMA_API IMA_STATUS IMA_SetIpConfigMethod(
2326                IMA_OID oid,
2327                IMA_BOOL enableDhcpIpConfiguration
2328);
2329
2330IMA_API	IMA_STATUS IMA_SetIsnsDiscovery(
2331		IMA_OID oid,
2332		IMA_BOOL enableIsnsDiscovery,
2333		IMA_ISNS_DISCOVERY_METHOD discoveryMethod,
2334		const IMA_HOST_ID *iSnsHost
2335);
2336
2337
2338IMA_API IMA_STATUS IMA_SetSubnetMask(
2339                IMA_OID oid,
2340                IMA_IP_ADDRESS subnetMask
2341);
2342
2343IMA_API IMA_STATUS IMA_SetDnsServerAddress(
2344                IMA_OID oid,
2345                const IMA_IP_ADDRESS *pPrimaryDnsServerAddress,
2346                const IMA_IP_ADDRESS *pAlternateDnsServerAddress
2347);
2348
2349IMA_API IMA_STATUS IMA_SetDefaultGateway(
2350                IMA_OID oid,
2351                IMA_IP_ADDRESS defaultGateway
2352);
2353
2354IMA_API IMA_STATUS IMA_GetSupportedAuthMethods(
2355                IMA_OID lhbaOid,
2356                IMA_BOOL getSettableMethods,
2357                IMA_UINT *pMethodCount,
2358                IMA_AUTHMETHOD *pMethodList
2359);
2360
2361IMA_API IMA_STATUS IMA_GetInUseInitiatorAuthMethods(
2362                IMA_OID lhbaOid,
2363                IMA_UINT        *pMethodCount,
2364                IMA_AUTHMETHOD  *pMethodList
2365);
2366
2367IMA_API IMA_STATUS IMA_GetInitiatorAuthParms(
2368                IMA_OID lhbaOid,
2369                IMA_AUTHMETHOD method,
2370                IMA_INITIATOR_AUTHPARMS *pParms
2371);
2372
2373IMA_API IMA_STATUS IMA_SetInitiatorAuthMethods(
2374                IMA_OID lhbaOid,
2375                IMA_UINT methodCount,
2376                const IMA_AUTHMETHOD *pMethodList
2377);
2378
2379IMA_API IMA_STATUS IMA_SetInitiatorAuthParms(
2380                IMA_OID lhbaOid,
2381                IMA_AUTHMETHOD method,
2382                const IMA_INITIATOR_AUTHPARMS *pParms
2383);
2384
2385
2386IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetOidList (
2387                IMA_OID oid,
2388                IMA_OID_LIST **ppList
2389);
2390
2391IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetProperties(
2392		IMA_OID staticDiscoveryTargetOid,
2393		IMA_STATIC_DISCOVERY_TARGET_PROPERTIES *pProps
2394);
2395
2396IMA_API IMA_STATUS IMA_SetStaticDiscovery(
2397		IMA_OID oid,
2398		IMA_BOOL enableStaticDiscovery
2399);
2400
2401IMA_API IMA_STATUS IMA_GetDiscoveryProperties(
2402		IMA_OID oid,
2403		IMA_DISCOVERY_PROPERTIES *pProps
2404);
2405
2406IMA_API IMA_STATUS IMA_AddDiscoveryAddress(
2407		IMA_OID oid,
2408		const IMA_TARGET_ADDRESS discoveryAddress,
2409		IMA_OID *pDiscoveryAddressOid
2410);
2411
2412IMA_API IMA_STATUS IMA_AddStaticDiscoveryTarget(
2413		IMA_OID oid,
2414		const IMA_STATIC_DISCOVERY_TARGET staticDiscoveryTarget,
2415		IMA_OID *pStaticDiscoveryTargetOid
2416);
2417
2418IMA_API IMA_STATUS IMA_GetAddressKeys(
2419		IMA_OID targetOid,
2420		IMA_ADDRESS_KEYS **ppKeys
2421);
2422
2423IMA_API IMA_STATUS IMA_GetSessionOidList (
2424		IMA_OID oid,
2425		IMA_OID_LIST **ppList
2426);
2427
2428IMA_API IMA_STATUS IMA_GetConnectionOidList (
2429		IMA_OID oid,
2430		IMA_OID_LIST **ppList
2431);
2432
2433IMA_API IMA_STATUS IMA_GetDiscoveryAddressOidList (
2434		IMA_OID oid,
2435		IMA_OID_LIST **ppList
2436);
2437
2438IMA_API IMA_STATUS IMA_GetDiscoveryAddressProperties (
2439		IMA_OID discoveryAddressOid,
2440		IMA_DISCOVERY_ADDRESS_PROPERTIES *pProps
2441);
2442
2443IMA_API IMA_STATUS IMA_RemoveDiscoveryAddress (
2444		IMA_OID oid
2445);
2446
2447IMA_API IMA_STATUS QIMA_SetUpdateInterval(IMA_OID pluginOid, time_t interval);
2448
2449IMA_API IMA_STATUS IMA_CommitHbaParameters (IMA_OID lhba, IMA_COMMIT_LEVEL commitLevel);
2450
2451#endif
2452
2453#ifdef __cplusplus
2454};
2455#endif
2456
2457
2458