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 68 extern "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 98 typedef unsigned char IMA_UINT8; // Unsigned 8 bits 99 typedef char IMA_INT8; // Signed 8 bits 100 typedef unsigned short IMA_UINT16; // Unsigned 16 bits 101 typedef short IMA_INT16; // Signed 16 bits 102 typedef unsigned int IMA_UINT32; // Unsigned 32 bits 103 typedef int IMA_INT32; // Signed 32 bits 104 typedef void* IMA_PVOID; // Pointer to void 105 typedef 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 110 typedef __int64 IMA_INT64; 111 typedef unsigned __int64 IMA_UINT64; 112 #else 113 typedef struct { 114 TN_UINT32 lo_val; 115 TN_UINT32 hi_val; 116 } IMA_INT64; 117 118 typedef 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 */ 128 typedef unsigned char IMA_UINT8; /* Unsigned 8 bits */ 129 typedef char IMA_INT8; /* Signed 8 bits */ 130 typedef unsigned short IMA_UINT16; /* Unsigned 16 bits */ 131 typedef short IMA_INT16; /* Signed 16 bits */ 132 typedef unsigned int IMA_UINT32; /* Unsigned 32 bits */ 133 typedef int IMA_INT32; /* Signed 32 bits */ 134 typedef void* IMA_PVOID; /* Pointer to void */ 135 typedef IMA_UINT32 IMA_VOID32; /* Opaque 32 bits */ 136 typedef long long IMA_INT64; 137 typedef 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 */ 184 typedef char IMA_CHAR; 185 186 /** 187 * A wide character. 188 */ 189 typedef 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 */ 195 typedef unsigned long IMA_UINT; 196 197 /** 198 * A boolean. 199 */ 200 typedef 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 */ 206 typedef IMA_UINT32 IMA_XBOOL; 207 208 /** 209 * A date and time. 210 */ 211 typedef struct tm IMA_DATETIME; 212 213 typedef unsigned char IMA_BYTE; 214 215 /** 216 ******************************************************************************* 217 * 218 * Constants and macros declarations related to IMA_STATUS 219 * 220 ******************************************************************************* 221 */ 222 #ifdef SOLARIS 223 typedef 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 267 typedef 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 */ 320 typedef 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 339 typedef 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 346 typedef 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 354 typedef enum 355 { 356 IMA_PHBA_STATUS_WORKING = 0, 357 IMA_PHBA_STATUS_FAILED = 1 358 } IMA_PHBA_STATUS; 359 360 typedef 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 369 typedef 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 377 typedef 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 387 typedef 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 396 typedef 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 */ 413 typedef 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 */ 459 typedef 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 475 typedef IMA_WCHAR IMA_HOST_NAME[IMA_HOST_NAME_LEN]; 476 typedef IMA_BYTE IMA_MAC_ADDRESS[6]; 477 478 /** 479 ******************************************************************************* 480 * 481 * Declaration of the IMA_LIBRARY_PROPERTIES structure 482 * 483 ******************************************************************************* 484 */ 485 typedef 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 */ 533 typedef 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 548 typedef struct _IMA_IP_ADDRESS 549 { 550 IMA_BOOL ipv4Address; 551 IMA_BYTE ipAddress[16]; 552 553 } IMA_IP_ADDRESS; 554 555 typedef struct _IMA_ADDRESS_KEY 556 { 557 IMA_IP_ADDRESS ipAddress; 558 IMA_UINT16 portNumber; 559 560 } IMA_ADDRESS_KEY; 561 562 typedef struct _IMA_ADDRESS_KEYS 563 { 564 IMA_UINT addressKeyCount; 565 IMA_ADDRESS_KEY addressKeys[1]; 566 567 } IMA_ADDRESS_KEYS; 568 569 typedef struct _IMA_ADDRESS_KEY_PROPERTIES 570 { 571 IMA_UINT addressKeyCount; 572 IMA_ADDRESS_KEY addressKeys[1]; 573 574 } IMA_ADDRESS_KEY_PROPERTIES; 575 576 typedef 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 601 typedef 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 613 typedef 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 628 typedef 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 640 typedef 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 */ 663 typedef wchar_t IMA_DOMAIN_NAME[256]; 664 665 typedef 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 */ 687 typedef 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 */ 747 typedef 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 */ 800 typedef 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 854 typedef 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 */ 875 typedef 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 */ 1039 typedef 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 1059 typedef 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 1068 typedef 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 1078 typedef 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 1086 typedef 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 1101 typedef 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 1110 typedef 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 1126 typedef 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 1141 typedef 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 1162 typedef 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 1189 typedef 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 1209 typedef struct _IMA_STATISTICS_PROPERTIES 1210 { 1211 IMA_BOOL statisticsCollectionSettable; 1212 IMA_BOOL statisticsCollectionEnabled; 1213 1214 } IMA_STATISTICS_PROPERTIES; 1215 1216 typedef 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 1232 typedef 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 1240 typedef void (* IMA_OBJECT_VISIBILITY_FN)( 1241 IMA_BOOL becomingVisible, 1242 IMA_OID oid 1243 ); 1244 1245 typedef void (* IMA_OBJECT_PROPERTY_FN)( 1246 IMA_OID oid 1247 ); 1248 1249 typedef 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 1267 typedef 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 1277 typedef 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 1287 typedef 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 1300 typedef 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 1311 typedef struct _IMA_STATIC_DISCOVERY_TARGET 1312 { 1313 IMA_NODE_NAME targetName; 1314 IMA_TARGET_ADDRESS targetAddress; 1315 1316 } IMA_STATIC_DISCOVERY_TARGET; 1317 1318 typedef 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 1326 typedef 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 1334 typedef 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 */ 1385 IMA_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 */ 1414 IMA_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 */ 1454 IMA_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 */ 1496 IMA_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 */ 1525 IMA_API IMA_STATUS IMA_GetSharedNodeOid( 1526 IMA_OID *pSharedNodeOid 1527 ); 1528 1529 IMA_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 */ 1569 IMA_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 */ 1616 IMA_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 */ 1640 IMA_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 */ 1684 IMA_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 */ 1714 IMA_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 */ 1756 IMA_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 */ 1785 IMA_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 */ 1827 IMA_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 */ 1851 IMA_API IMA_STATUS IMA_FreeMemory( 1852 void *pMemory 1853 ); 1854 1855 1856 1857 IMA_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 */ 1899 IMA_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 */ 1942 IMA_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 */ 1985 IMA_API IMA_STATUS IMA_GetMaxRecvDataSegmentLengthProperties( 1986 IMA_OID oid, 1987 IMA_MIN_MAX_VALUE *pProps 1988 ); 1989 1990 1991 /*---------------------------------------------*/ 1992 IMA_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 2003 IMA_API IMA_STATUS IMA_GetNetworkPortalOidList( 2004 IMA_OID oid, 2005 IMA_OID_LIST **ppList 2006 ); 2007 2008 IMA_API IMA_STATUS IMA_SetFirstBurstLength( 2009 IMA_OID oid, 2010 IMA_UINT firstBurstLength 2011 ); 2012 2013 IMA_API IMA_STATUS IMA_SetMaxBurstLength( 2014 IMA_OID oid, 2015 IMA_UINT maxBurstLength 2016 ); 2017 2018 IMA_API IMA_STATUS IMA_SetMaxRecvDataSegmentLength( 2019 IMA_OID oid, 2020 IMA_UINT maxRecvDataSegmentLength 2021 ); 2022 2023 IMA_API IMA_STATUS IMA_GetMaxConnectionsProperties( 2024 IMA_OID oid, 2025 IMA_MIN_MAX_VALUE *pProps 2026 ); 2027 2028 IMA_API IMA_STATUS IMA_SetMaxConnections( 2029 IMA_OID oid, 2030 IMA_UINT maxConnections 2031 ); 2032 2033 IMA_API IMA_STATUS IMA_GetDefaultTime2RetainProperties( 2034 IMA_OID oid, 2035 IMA_MIN_MAX_VALUE *pProps 2036 ); 2037 2038 IMA_API IMA_STATUS IMA_SetDefaultTime2Retain( 2039 IMA_OID oid, 2040 IMA_UINT defaultTime2Retain 2041 ); 2042 2043 IMA_API IMA_STATUS IMA_GetDefaultTime2WaitProperties( 2044 IMA_OID oid, 2045 IMA_MIN_MAX_VALUE *pProps 2046 ); 2047 2048 IMA_API IMA_STATUS IMA_SetDefaultTime2Wait( 2049 IMA_OID oid, 2050 IMA_UINT defaultTime2Wait 2051 ); 2052 2053 IMA_API IMA_STATUS IMA_GetMaxOutstandingR2TProperties( 2054 IMA_OID oid, 2055 IMA_MIN_MAX_VALUE *pProps 2056 ); 2057 2058 IMA_API IMA_STATUS IMA_SetMaxOutstandingR2T( 2059 IMA_OID oid, 2060 IMA_UINT maxOutstandingR2T 2061 ); 2062 2063 IMA_API IMA_STATUS IMA_GetErrorRecoveryLevelProperties( 2064 IMA_OID oid, 2065 IMA_MIN_MAX_VALUE *pProps 2066 ); 2067 2068 IMA_API IMA_STATUS IMA_SetErrorRecoveryLevel( 2069 IMA_OID oid, 2070 IMA_UINT errorRecoveryLevel 2071 ); 2072 2073 IMA_API IMA_STATUS IMA_GetInitialR2TProperties( 2074 IMA_OID oid, 2075 IMA_BOOL_VALUE *pProps 2076 ); 2077 2078 IMA_API IMA_STATUS IMA_SetInitialR2T( 2079 IMA_OID oid, 2080 IMA_BOOL initialR2T 2081 ); 2082 2083 IMA_API IMA_STATUS IMA_GetImmediateDataProperties( 2084 IMA_OID oid, 2085 IMA_BOOL_VALUE *pProps 2086 ); 2087 2088 IMA_API IMA_STATUS IMA_SetImmediateData( 2089 IMA_OID oid, 2090 IMA_BOOL immediateData 2091 ); 2092 2093 IMA_API IMA_STATUS IMA_GetDataPduInOrderProperties( 2094 IMA_OID oid, 2095 IMA_BOOL_VALUE *pProps 2096 ); 2097 2098 IMA_API IMA_STATUS IMA_SetDataPduInOrder( 2099 IMA_OID oid, 2100 IMA_BOOL dataPduInOrder 2101 ); 2102 2103 IMA_API IMA_STATUS IMA_GetDataSequenceInOrderProperties( 2104 IMA_OID oid, 2105 IMA_BOOL_VALUE *pProps 2106 ); 2107 2108 IMA_API IMA_STATUS IMA_SetDataSequenceInOrder( 2109 IMA_OID oid, 2110 IMA_BOOL dataSequenceInOrder 2111 ); 2112 2113 IMA_API IMA_STATUS IMA_SetStatisticsCollection( 2114 IMA_OID oid, 2115 IMA_BOOL enableStatisticsCollection 2116 ); 2117 2118 IMA_API IMA_STATUS IMA_GetNetworkPortStatus( 2119 IMA_OID portOid, 2120 IMA_NETWORK_PORT_STATUS *pStatus 2121 ); 2122 2123 IMA_API IMA_STATUS IMA_GetTargetOidList( 2124 IMA_OID oid, 2125 IMA_OID_LIST **ppList 2126 ); 2127 2128 IMA_API IMA_STATUS IMA_RemoveStaleData( 2129 IMA_OID lhbaOid 2130 ); 2131 2132 IMA_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 2139 IMA_API IMA_STATUS IMA_SetSlpDiscovery( 2140 IMA_OID phbaOid, 2141 IMA_BOOL enableSlpDiscovery 2142 ); 2143 2144 IMA_API IMA_STATUS IMA_SetStaticDiscovery( 2145 IMA_OID phbaOid, 2146 IMA_BOOL enableStaticDiscovery 2147 ); 2148 2149 IMA_API IMA_STATUS IMA_SetSendTargetsDiscovery( 2150 IMA_OID oid, 2151 IMA_BOOL enableSendTargetsDiscovery 2152 ); 2153 2154 IMA_API IMA_STATUS IMA_RemoveStaticDiscoveryTarget( 2155 IMA_OID targetOid 2156 ); 2157 2158 IMA_API IMA_STATUS IMA_GetIpsecProperties( 2159 IMA_OID phbaOid, 2160 IMA_IPSEC_PROPERTIES *pProps 2161 ); 2162 2163 IMA_API IMA_STATUS IMA_GetPnpOidList( 2164 IMA_OID oid, 2165 IMA_OID_LIST **ppList 2166 ); 2167 2168 IMA_API IMA_STATUS IMA_GetPhbaDownloadProperties( 2169 IMA_OID phbaOid, 2170 IMA_PHBA_DOWNLOAD_PROPERTIES *pProps 2171 ); 2172 2173 IMA_API IMA_STATUS IMA_IsPhbaDownloadFile( 2174 IMA_OID phbaOid, 2175 const IMA_WCHAR *pFileName, 2176 IMA_PHBA_DOWNLOAD_IMAGE_PROPERTIES *pProps 2177 ); 2178 2179 IMA_API IMA_STATUS IMA_PhbaDownload( 2180 IMA_OID phbaOid, 2181 IMA_PHBA_DOWNLOAD_IMAGE_TYPE imageType, 2182 const IMA_WCHAR *pFileName 2183 ); 2184 2185 IMA_API IMA_STATUS IMA_GetNetworkPortalProperties( 2186 IMA_OID networkPortalOid, 2187 IMA_NETWORK_PORTAL_PROPERTIES *pProps 2188 ); 2189 2190 IMA_API IMA_STATUS IMA_SetNetworkPortalIpAddress( 2191 IMA_OID networkPortalOid, 2192 const IMA_IP_ADDRESS NewIpAddress 2193 ); 2194 2195 IMA_API IMA_STATUS IMA_GetLnpOidList( 2196 IMA_OID_LIST **ppList 2197 ); 2198 2199 IMA_API IMA_STATUS IMA_GetLnpProperties( 2200 IMA_OID lnpOid, 2201 IMA_LNP_PROPERTIES *pProps 2202 ); 2203 2204 IMA_API IMA_STATUS IMA_GetPnpProperties( 2205 IMA_OID pnpOid, 2206 IMA_PNP_PROPERTIES *pProps 2207 ); 2208 2209 IMA_API IMA_STATUS IMA_GetPnpStatistics( 2210 IMA_OID pnpOid, 2211 IMA_PNP_STATISTICS *pStats 2212 ); 2213 2214 IMA_API IMA_STATUS IMA_GetTargetProperties( 2215 IMA_OID targetOid, 2216 IMA_TARGET_PROPERTIES *pProps 2217 ); 2218 2219 IMA_API IMA_STATUS IMA_GetTargetErrorStatistics( 2220 IMA_OID targetOid, 2221 IMA_TARGET_ERROR_STATISTICS *pStats 2222 ); 2223 2224 IMA_API IMA_STATUS IMA_GetLuOidList( 2225 IMA_OID oid, 2226 IMA_OID_LIST **ppList 2227 ); 2228 2229 IMA_API IMA_STATUS IMA_GetLuOid( 2230 IMA_OID targetOid, 2231 IMA_UINT64 lun, 2232 IMA_OID *pluOid 2233 ); 2234 2235 IMA_API IMA_STATUS IMA_GetLuProperties( 2236 IMA_OID luOid, 2237 IMA_LU_PROPERTIES *pProps 2238 ); 2239 2240 IMA_API IMA_STATUS IMA_GetStatisticsProperties( 2241 IMA_OID oid, 2242 IMA_STATISTICS_PROPERTIES *pProps 2243 ); 2244 2245 IMA_API IMA_STATUS IMA_GetDeviceStatistics( 2246 IMA_OID oid, 2247 IMA_DEVICE_STATISTICS *pStats 2248 ); 2249 2250 IMA_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 2263 IMA_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 2273 IMA_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 2285 IMA_API IMA_STATUS IMA_ExposeLu( 2286 IMA_OID luOid 2287 ); 2288 2289 IMA_API IMA_STATUS IMA_UnexposeLu( 2290 IMA_OID luOid 2291 ); 2292 2293 IMA_API IMA_STATUS IMA_GetPhbaStatus( 2294 IMA_OID hbaOid, 2295 IMA_PHBA_STATUS *pStatus 2296 ); 2297 2298 IMA_API IMA_STATUS IMA_RegisterForObjectVisibilityChanges ( 2299 IMA_OBJECT_VISIBILITY_FN pClientFn 2300 ); 2301 2302 IMA_API IMA_STATUS IMA_DeregisterForObjectVisibilityChanges ( 2303 IMA_OBJECT_VISIBILITY_FN pClientFn 2304 ); 2305 2306 IMA_API IMA_STATUS IMA_RegisterForObjectPropertyChanges ( 2307 IMA_OBJECT_PROPERTY_FN pClientFn 2308 ); 2309 2310 IMA_API IMA_STATUS IMA_DeregisterForObjectPropertyChanges ( 2311 IMA_OBJECT_PROPERTY_FN pClientFn 2312 ); 2313 2314 2315 IMA_API IMA_STATUS IMA_GetAddressKeyProperties( 2316 IMA_OID targetOid, 2317 IMA_ADDRESS_KEY_PROPERTIES **ppProps 2318 ); 2319 2320 IMA_API IMA_STATUS IMA_GetIpProperties( 2321 IMA_OID oid, 2322 IMA_IP_PROPERTIES *pProps 2323 ); 2324 2325 IMA_API IMA_STATUS IMA_SetIpConfigMethod( 2326 IMA_OID oid, 2327 IMA_BOOL enableDhcpIpConfiguration 2328 ); 2329 2330 IMA_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 2338 IMA_API IMA_STATUS IMA_SetSubnetMask( 2339 IMA_OID oid, 2340 IMA_IP_ADDRESS subnetMask 2341 ); 2342 2343 IMA_API IMA_STATUS IMA_SetDnsServerAddress( 2344 IMA_OID oid, 2345 const IMA_IP_ADDRESS *pPrimaryDnsServerAddress, 2346 const IMA_IP_ADDRESS *pAlternateDnsServerAddress 2347 ); 2348 2349 IMA_API IMA_STATUS IMA_SetDefaultGateway( 2350 IMA_OID oid, 2351 IMA_IP_ADDRESS defaultGateway 2352 ); 2353 2354 IMA_API IMA_STATUS IMA_GetSupportedAuthMethods( 2355 IMA_OID lhbaOid, 2356 IMA_BOOL getSettableMethods, 2357 IMA_UINT *pMethodCount, 2358 IMA_AUTHMETHOD *pMethodList 2359 ); 2360 2361 IMA_API IMA_STATUS IMA_GetInUseInitiatorAuthMethods( 2362 IMA_OID lhbaOid, 2363 IMA_UINT *pMethodCount, 2364 IMA_AUTHMETHOD *pMethodList 2365 ); 2366 2367 IMA_API IMA_STATUS IMA_GetInitiatorAuthParms( 2368 IMA_OID lhbaOid, 2369 IMA_AUTHMETHOD method, 2370 IMA_INITIATOR_AUTHPARMS *pParms 2371 ); 2372 2373 IMA_API IMA_STATUS IMA_SetInitiatorAuthMethods( 2374 IMA_OID lhbaOid, 2375 IMA_UINT methodCount, 2376 const IMA_AUTHMETHOD *pMethodList 2377 ); 2378 2379 IMA_API IMA_STATUS IMA_SetInitiatorAuthParms( 2380 IMA_OID lhbaOid, 2381 IMA_AUTHMETHOD method, 2382 const IMA_INITIATOR_AUTHPARMS *pParms 2383 ); 2384 2385 2386 IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetOidList ( 2387 IMA_OID oid, 2388 IMA_OID_LIST **ppList 2389 ); 2390 2391 IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetProperties( 2392 IMA_OID staticDiscoveryTargetOid, 2393 IMA_STATIC_DISCOVERY_TARGET_PROPERTIES *pProps 2394 ); 2395 2396 IMA_API IMA_STATUS IMA_SetStaticDiscovery( 2397 IMA_OID oid, 2398 IMA_BOOL enableStaticDiscovery 2399 ); 2400 2401 IMA_API IMA_STATUS IMA_GetDiscoveryProperties( 2402 IMA_OID oid, 2403 IMA_DISCOVERY_PROPERTIES *pProps 2404 ); 2405 2406 IMA_API IMA_STATUS IMA_AddDiscoveryAddress( 2407 IMA_OID oid, 2408 const IMA_TARGET_ADDRESS discoveryAddress, 2409 IMA_OID *pDiscoveryAddressOid 2410 ); 2411 2412 IMA_API IMA_STATUS IMA_AddStaticDiscoveryTarget( 2413 IMA_OID oid, 2414 const IMA_STATIC_DISCOVERY_TARGET staticDiscoveryTarget, 2415 IMA_OID *pStaticDiscoveryTargetOid 2416 ); 2417 2418 IMA_API IMA_STATUS IMA_GetAddressKeys( 2419 IMA_OID targetOid, 2420 IMA_ADDRESS_KEYS **ppKeys 2421 ); 2422 2423 IMA_API IMA_STATUS IMA_GetSessionOidList ( 2424 IMA_OID oid, 2425 IMA_OID_LIST **ppList 2426 ); 2427 2428 IMA_API IMA_STATUS IMA_GetConnectionOidList ( 2429 IMA_OID oid, 2430 IMA_OID_LIST **ppList 2431 ); 2432 2433 IMA_API IMA_STATUS IMA_GetDiscoveryAddressOidList ( 2434 IMA_OID oid, 2435 IMA_OID_LIST **ppList 2436 ); 2437 2438 IMA_API IMA_STATUS IMA_GetDiscoveryAddressProperties ( 2439 IMA_OID discoveryAddressOid, 2440 IMA_DISCOVERY_ADDRESS_PROPERTIES *pProps 2441 ); 2442 2443 IMA_API IMA_STATUS IMA_RemoveDiscoveryAddress ( 2444 IMA_OID oid 2445 ); 2446 2447 IMA_API IMA_STATUS QIMA_SetUpdateInterval(IMA_OID pluginOid, time_t interval); 2448 2449 IMA_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