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