1 /******************************************************************************
4 * mpapi.h - general header file for Multipath Management API Version 1.0
8 * The contents of this file are subject to the SNIA Public License
9 * Version 1.1 (the "License"); you may not use this file except in
10 * compliance with the License. You may obtain a copy of the License at
12 * http://mp-mgmt-api.sourceforge.net
14 * Software distributed under the License is distributed on an "AS IS"
15 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16 * the License for the specific language governing rights and limitations
19 * The Original Code is SNIA iSCSI Management API and Multipath Management API
22 * The Initial Developer of the Original Code is:
23 * Benjamin F. Kuo Troika Networks, Inc. (benk@troikanetworks.com)
24 * David Dillard VERITAS Software(david.dillard@veritas.com)
25 * Jeff Ding Adaptec, Inc. (jding@corp.adaptec.com)
26 * Dave Wysochanski Network Appliance, Inc. (davidw@netapp.com)
27 * Hyon Kim Sun Microsystems(hyon.kim@sun.com)
30 * Paul von Behren Sun Microsystems(paul.vonbehren@sun.com)
32 ******************************************************************************
35 * 1/15/2005 Implemented SNIA MP API specification 1.0
37 * - Added the license location in the header comment.
38 * - Added an implementation note in constants and macros
39 * declarations section.
40 * - Fixed field name value in struct _MP_PROPRIETARY_PROPERTY.
41 * - Fixed typo in logicalUnitGroupID in
42 * _MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
43 * - Fixed typo in desiredState in struct _MP_TPG_STATE_PAIR.
44 * - Fixed typo in API name MP_GetTargetPortGroupProperties.
45 * - Clarified description of MP_STATUS_INVALID_PARAMETER error
46 * in MP_GetObjectType().
47 * - Fixed typo in API name
48 * MP_GetProprietaryLoadBalanceProperties().
50 * - mpapi.h header file is updated for
51 * MP_LOAD_BALANCE_TYPE change in the spec.
52 *****************************************************************************/
68 /* Library version string */
69 #define MP_LIBVERSION 1
72 *******************************************************************************
74 * Generic MP Constant Definitions
76 *******************************************************************************
78 #define RL_LIBRARY_SEQNUM 0
81 * Value which can be assigned to an MP_BOOL and or an MP_XBOOL.
86 * Value which can be assigned to an MP_BOOL and or an MP_XBOOL.
91 * Value which can be assigned to an MP_XBOOL.
93 #define MP_UNKNOWN 0xFFFFFFFF
95 #define MP_MAX_NUM_PLUGINS 64
96 #define MP_OBJECT_TYPE_MATCH 1
97 #define MP_OBJECT_TYPE_ANY 2
98 #define MAX_NAME_SIZE 256
99 #define MAX_LINE_SIZE 515
103 ******************************************************************************
105 * Base MP API Type Definitions
107 ******************************************************************************
110 typedef unsigned char MP_UINT8
; /* unsigned 8 bits */
111 typedef char MP_INT8
; /* signed 8 bits */
112 typedef unsigned short MP_UINT16
; /* unsigned 16 bits */
113 typedef short MP_INT16
; /* signed 16 bits */
114 typedef unsigned int MP_UINT32
; /* unsigned 32 bits */
115 typedef int MP_INT32
; /* signed 32 bits */
116 typedef void* MP_PVOID
; /* pointer to void */
117 typedef MP_UINT32 MP_VOID32
; /* opaque 32 bits */
118 typedef long long MP_INT64
; /* signed 64 bits */
119 typedef unsigned long long MP_UINT64
; /* unsigned 64 bits */
124 typedef char MP_CHAR
;
129 typedef wchar_t MP_WCHAR
;
132 * An unsigned character.
134 typedef unsigned char MP_BYTE
;
139 typedef MP_UINT32 MP_BOOL
;
142 * An extended boolean: can have the values @ref MP_TRUE, @ref MP_FALSE, and
145 typedef MP_UINT32 MP_XBOOL
;
148 ******************************************************************************
150 * Constants and macros declarations related to MP_STATUS
151 * Implementation Notes: This library does validation for OID argument and
152 * returns the following errors.
154 * 1. MP_STATUS_INVALID_OBJECT_TYPE when input OID type is not
155 * one of legitimate types defined SNIA Multipath Management
157 * 2. MP_STATUS_INVALID_PARAMETER when input OID type is
158 * legitimate but not a proper type for API.
159 * 3. MP_STATUS_OBJECT_NOT_FOUND when the ownerId of input OID is
160 * not found or no object instance with matching
161 * sequenceNumber is found.
162 * The ownerId is validated by the common library and the
163 * sequence number is validated by the plugin library.
165 ******************************************************************************
168 MP_STATUS_SUCCESS
= 0,
169 MP_STATUS_INVALID_PARAMETER
= 1,
170 MP_STATUS_UNKNOWN_FN
= 2,
171 MP_STATUS_FAILED
= 3,
172 MP_STATUS_INSUFFICIENT_MEMORY
= 4,
173 MP_STATUS_INVALID_OBJECT_TYPE
= 5,
174 MP_STATUS_OBJECT_NOT_FOUND
= 6,
175 MP_STATUS_UNSUPPORTED
= 7,
176 MP_STATUS_FN_REPLACED
= 8,
177 MP_STATUS_ACCESS_STATE_INVALID
= 9,
178 MP_STATUS_INVALID_WEIGHT
= 10,
179 MP_STATUS_PATH_NONOPERATIONAL
= 11,
180 MP_STATUS_TRY_AGAIN
= 12,
181 MP_STATUS_NOT_PERMITTED
= 13
186 ******************************************************************************
188 * Declaration of the MP_PATH_STATE constants
190 ******************************************************************************
192 #define MP_PATH_STATE_OKAY 0
193 #define MP_PATH_STATE_PATH_ERR 1
194 #define MP_PATH_STATE_LU_ERR 2
195 #define MP_PATH_STATE_RESERVED 3
196 #define MP_PATH_STATE_REMOVED 4
197 #define MP_PATH_STATE_TRANSITIONING 5
198 #define MP_PATH_STATE_OPERATIONAL_CLOSED 6
199 #define MP_PATH_STATE_INVALID_CLOSED 7
200 #define MP_PATH_STATE_OFFLINE_CLOSED 8
201 #define MP_PATH_STATE_UNKNOWN 9
203 typedef MP_UINT32 MP_PATH_STATE
;
206 *******************************************************************************
208 * Declaration of the MP_OBJECT_TYPE constants
210 *******************************************************************************
212 #define MP_OBJECT_TYPE_UNKNOWN 0
213 #define MP_OBJECT_TYPE_PLUGIN 1
214 #define MP_OBJECT_TYPE_INITIATOR_PORT 2
215 #define MP_OBJECT_TYPE_TARGET_PORT 3
216 #define MP_OBJECT_TYPE_MULTIPATH_LU 4
217 #define MP_OBJECT_TYPE_PATH_LU 5
218 #define MP_OBJECT_TYPE_DEVICE_PRODUCT 6
219 #define MP_OBJECT_TYPE_TARGET_PORT_GROUP 7
220 #define MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE 8
222 /* set to the highest constant of object type. */
223 #define MP_OBJECT_TYPE_MAX 8
225 typedef MP_UINT32 MP_OBJECT_TYPE
;
228 *******************************************************************************
230 * Declaration of the MP_PORT_TRANSPORT_TYPE
232 *******************************************************************************
234 #define MP_PORT_TRANSPORT_TYPE_UNKNOWN 0
235 #define MP_PORT_TRANSPORT_TYPE_MPNODE 1
236 #define MP_PORT_TRANSPORT_TYPE_FC 2
237 #define MP_PORT_TRANSPORT_TYPE_SPI 3
238 #define MP_PORT_TRANSPORT_TYPE_ISCSI 4
239 #define MP_PORT_TRANSPORT_TYPE_IFB 5
241 typedef MP_UINT32 MP_PORT_TRANSPORT_TYPE
;
244 *******************************************************************************
246 * Declaration of the MP_ACCESS_STATE_TYPE constants
248 *******************************************************************************
250 #define MP_ACCESS_STATE_ACTIVE_OPTIMIZED (0x0)
251 #define MP_ACCESS_STATE_ACTIVE_NONOPTIMIZED (0x1)
252 #define MP_ACCESS_STATE_STANDBY (0x2)
253 #define MP_ACCESS_STATE_UNAVAILABLE (0x3)
254 #define MP_ACCESS_STATE_TRANSITIONING (0xF)
255 #define MP_ACCESS_STATE_ACTIVE (0x10)
257 typedef MP_UINT32 MP_ACCESS_STATE_TYPE
;
260 *******************************************************************************
262 * Declaration of the MP_LOAD_BALANCE_TYPE constants
264 *******************************************************************************
266 #define MP_LOAD_BALANCE_TYPE_UNKNOWN (1<<0)
267 #define MP_LOAD_BALANCE_TYPE_ROUNDROBIN (1<<1)
268 #define MP_LOAD_BALANCE_TYPE_LEASTBLOCKS (1<<2)
269 #define MP_LOAD_BALANCE_TYPE_LEASTIO (1<<3)
270 #define MP_LOAD_BALANCE_TYPE_DEVICE_PRODUCT (1<<4)
271 #define MP_LOAD_BALANCE_TYPE_LBA_REGION (1<<5)
272 #define MP_LOAD_BALANCE_TYPE_FAILOVER_ONLY (1<<6)
274 * Proprietary load balance type should start from 0x10000(1<<16) or greater.
275 * It is exposed through API MP_GetProprietaryLoadBalanceProperties if exists.
278 typedef MP_UINT32 MP_LOAD_BALANCE_TYPE
;
280 typedef struct mpPluginInfo
{
281 MP_WCHAR pluginName
[MAX_NAME_SIZE
];
282 MP_CHAR pluginPath
[MAX_NAME_SIZE
];
289 *******************************************************************************
291 * Declaration of the MP_PROPRIETARY_PROPERTY
293 *******************************************************************************
295 typedef struct _MP_PROPRIETARY_PROPERTY
300 } MP_PROPRIETARY_PROPERTY
;
303 *******************************************************************************
305 * Declaration of the MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
307 *******************************************************************************
309 typedef struct _MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
311 MP_LOAD_BALANCE_TYPE typeIndex
;
313 MP_WCHAR vendorName
[256];
314 MP_UINT32 proprietaryPropertyCount
;
315 MP_PROPRIETARY_PROPERTY proprietaryProperties
[8];
317 } MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
;
320 *******************************************************************************
322 * Declaration of the MP_UINT32 MP_LOGICAL_UNIT_NAME_TYPE constants
324 *******************************************************************************
326 #define MP_LU_NAME_TYPE_UNKNOWN 0
327 #define MP_LU_NAME_TYPE_VPD83_TYPE1 1
328 #define MP_LU_NAME_TYPE_VPD83_TYPE2 2
329 #define MP_LU_NAME_TYPE_VPD83_TYPE3 3
330 #define MP_LU_NAME_TYPE_DEVICE_SPECIFIC 4
332 typedef MP_UINT32 MP_LOGICAL_UNIT_NAME_TYPE
;
335 *******************************************************************************
337 * Declaration of the MP_UINT32 MP_AUTOFAILBACK_SUPPORT constants
339 *******************************************************************************
341 #define MP_AUTOFAILBACK_SUPPORT_NONE 0
342 #define MP_AUTOFAILBACK_SUPPORT_PLUGIN 1
343 #define MP_AUTOFAILBACK_SUPPORT_MPLU 2
344 #define MP_AUTOFAILBACK_SUPPORT_PLUGINANDMPLU 3
346 typedef MP_UINT32 MP_AUTOFAILBACK_SUPPORT
;
349 *******************************************************************************
351 * Declaration of the MP_UINT32 MP_AUTOPROBING_SUPPORT constants
353 *******************************************************************************
355 #define MP_AUTOPROBING_SUPPORT_NONE 0
356 #define MP_AUTOPROBING_SUPPORT_PLUGIN 1
357 #define MP_AUTORPOBING_SUPPORT_MPLU 2
358 #define MP_AUTORPOBING_SUPPORT_PLUGINANDMPLU 3
360 typedef MP_UINT32 MP_AUTOPROBING_SUPPORT
;
363 *******************************************************************************
365 * Declaration of the MP_OID structure
367 * This structure should be treated as opaque by clients of the API.
368 * Appropriate APIs should be used to extract information from the structure.
370 * Also ZERO_OID is defined for APIs that may handle multiple plugin OIDs.
372 *******************************************************************************
374 typedef struct _MP_OID
377 * The type of the object. When an object ID is supplied as a parameter
378 * to an API the library uses this value to insure that the supplied
379 * object ID's type is appropriate for the API.
381 MP_OBJECT_TYPE objectType
;
384 * A value determined by the library which it uses to uniquely identify the
385 * owner of an object. The owner of an object is either the library itself
386 * or a plugin. When an object ID is supplied as a parameter to an API the
387 * library uses this value to determine if it should handle the call itself
388 * or direct the call to one or more plugins.
393 * A value determined by a plugin which a plugin uses, perhaps in
394 * combination with the object type, to uniquely identify one of its
397 MP_UINT64 objectSequenceNumber
;
401 #define ZERO_OID ((const MP_OID){MP_OBJECT_TYPE_UNKNOWN,0,0})
404 *******************************************************************************
406 * Declaration of the MP_OID_LIST structure
408 * This structure is used by a number of APIs to return lists of objects. Any
409 * instance of this structure returned by an API must be freed by a client
410 * using the MP_FreeOidList API. Although oids is declared to be an
412 * @ref MP_OID structure it can in fact contain any number of
413 * @ref MP_OID structures. The oidCount indicates the number of @ref MP_OID
414 * structures in the oids array.
416 * @note The @a oids array is a variable length array, despite its declaration
417 * below it can be of any length.
419 *******************************************************************************
421 typedef struct _MP_OID_LIST
424 * The number of object IDs in the @a oids array.
429 * A variable length array of zero or more object IDs. There are
430 * 'oidCount' object IDs in this array.
437 *******************************************************************************
439 * Declaration of the MP_LIBRARY_PROPERTIES structure
441 * This structure is returned by the MP_GetLibraryProperties() API.
443 *******************************************************************************
445 typedef struct _MP_LIBRARY_PROPERTIES
448 * The version of the Multipath Management API implemented by the library.
450 MP_UINT32 supportedMpVersion
;
453 * A null terminated ASCII string containing the name of the vendor that
454 * created the binary version of the library.
456 MP_WCHAR vendor
[256];
459 * A null terminated ASCII string containing the implementation version
460 * of the library from the vendor specified in the 'vendor' field.
462 MP_WCHAR implementationVersion
[256];
465 * A null terminated ASCII string ideally containing the path and file
466 * name of the library that is being used by the currently executing
467 * process can be found. If the path cannot be determined then it is
468 * acceptable to fill this field with only the name (and extension if
469 * applicable) of the file of the library. If this cannot be determined
470 * then this field should be an empty string.
472 MP_CHAR fileName
[256];
475 * The time and date that the library that is executing was built.
477 MP_WCHAR buildTime
[256];
479 } MP_LIBRARY_PROPERTIES
;
482 *******************************************************************************
484 * Declaration of the MP_PLUGIN_PROPERTIES structure
486 * This structure is returned by the MP_GetPluginProperties() API.
488 *******************************************************************************
490 typedef struct _MP_PLUGIN_PROPERTIES
493 * The version of the Multipath Management API implemented by a plugin.
495 MP_UINT32 supportedMpVersion
;
498 * A null terminated Unicode string containing the name of the vendor that
499 * created the binary version of the plugin.
501 MP_WCHAR vendor
[256];
504 * A null terminated Unicode string containing the implementation version
505 * of the plugin from the vendor specified in vendor.
507 MP_WCHAR implementationVersion
[256];
510 * A null terminated ASCII string ideally containing the path and file
511 * name of the plugin that is filling in this structure.
513 MP_CHAR fileName
[256];
516 * The time and date that the plugin that is executing was built.
518 MP_WCHAR buildTime
[256];
521 * A null terminated Unicode string containing the name of the multipath
522 * driver vendor associated with this plugin.
524 MP_WCHAR driverVendor
[256];
527 * A null terminated Unicode string ideally containing the path and file
528 * name of the plugin that is filling in this structure.
530 MP_CHAR driverName
[256];
533 * A null terminated Unicode string containing the version number of
534 * the multipath driver.
536 MP_WCHAR driverVersion
[256];
539 * A set of flags representing the load balance types
540 * (MP_LOAD_BALANCE_TYPES) supported by the plugin/driver as a plugin-wide
543 MP_UINT32 supportedLoadBalanceTypes
;
546 * boolean indicating whether the implementation supports activating target
549 MP_BOOL canSetTPGAccess
;
552 * A Boolean indicating whether the implementations supports overriding
553 * paths. Setting this to true indicates MP_SetOverridePath and
554 * MP_CancelOverridePath are supported.
556 MP_BOOL canOverridePaths
;
559 * A boolean indicating whether the implementation exposes (or leaves
560 * exposed) device files for the individual paths encapsulated by the
561 * multipath device file. This is typically true for MP drivers that sit
562 * near the top of the driver stack..
564 MP_BOOL exposesPathDeviceFiles
;
567 * A string representing the primary file names the driver uses for
568 * multipath logical units.
570 MP_CHAR deviceFileNamespace
[256];
573 * A boolean indicating whether the driver limits multipath capabilities
574 * to certain device types. If true, then the driver only provides multipath
575 * support to devices exposed through MP_DEVICE_PRODUCT_PROPERTIES
576 * instances. If false, then the driver supports any device that provides
577 * standard SCSI logical unit identifiers.
579 MP_BOOL onlySupportsSpecifiedProducts
;
582 * Describes the range of administer settable path weights supported by the
583 * driver. A driver with no path preference capabilities should set
584 * this property to zero. A driver with the ability to enable/disable
585 * paths should set this property to 1. Drivers with more weight settings
586 * can set the property appropriately.
588 MP_UINT32 maximumWeight
;
591 * The autofailback support indicates whether the implementation supports
592 * auto-failback (to reenable paths that revert to a good state) at the
593 * plugin level, the multipath logical unit level, both levels or whether
594 * auto-failback is unsupported.
596 MP_AUTOFAILBACK_SUPPORT autoFailbackSupport
;
599 * A Boolean indicating whether plugin-wide autofailback is currently
600 * enabled. This parameter is undefined if autoFailbackSupport is
601 * MP_AUTOFAILBACK_SUPPORT_NONE or MP_AUTOFAILBACK_SUPPORT_MPLU.
603 MP_BOOL pluginAutoFailbackEnabled
;
606 * The maximum plugin-wide polling rate (in seconds) for auto-failback
607 * supported by the driver. A value of zero indicates the driver/plugin
608 * does not support polling. Undefined if autoFailbackSupport is
609 * MP_AUTOFAILBACK_SUPPORT_NONE or MP_AUTOFAILBACK_SUPPORT_MPLU. If the
610 * plugin/driver supports auto-failback without polling or does not provide
611 * a way to set the polling rate, then this must be set to zero (0).
612 * This value is set by the plugin and cannot be modified by users.
614 MP_UINT32 failbackPollingRateMax
;
617 * The current plugin-wide auto-failback polling rate (in seconds).
618 * Undefined if autofailbackSupport is MP_AUTOFAILBACK_SUPPORT_NONE or
619 * MP_AUTOFAILBACK_SUPPORT_MPLU. Cannot be more that plooingRateMax.
621 MP_UINT32 currentFailbackPollingRate
;
624 * An enumerated type indicating whether the implementation supports
625 * auto-probing at the plugin level, the multipath logical unit level, both
626 * levels or whether auto-probing is unsupported.
628 MP_AUTOPROBING_SUPPORT autoProbingSupport
;
631 * A boolean indicating that plugin-wide auto-probing is enabled. This
632 * property is undefined if autoProbingSupport is
633 * MP_AUTOPROBING_SUPPORT_NONE or MP_AUTOPROBING_SUPPORT_MPLU.
635 MP_BOOL pluginAutoProbingEnabled
;
638 * The maximum plugin-wide polling rate (in seconds) for auto-probing
639 * supported by the driver. Undefined if autoProbingSupport is
640 * MP_AUTOPROBING_SUPPORT_NONE or MP_AUTOPROBING_SUPPORT_MPLU. If the
641 * plugin/driver supports auto-probing without polling or does not provide a
642 * way to set the probing polling rate, then this must be set to zero (0).
643 * This value is set by the plugin and cannot be modified by users.
645 MP_UINT32 probingPollingRateMax
;
648 * The current plugin-wide auto-probing polling rate (in seconds).
649 * Undefined if autoProbingSupport is MP_AUTOPROBING_SUPPORT_NONE or
650 * MP_AUTOPROBING_SUPPORT_MPLU. Cannot be more that probingPollingRateMax.
652 MP_UINT32 currentProbingPollingRate
;
655 * The load balance type that will be used by the driver for devices
656 * (without a corresponding MP_DEVICE_PRODUCT_PROPERTIES instance) unless
657 * overridden by the administrator. Any logical unit with vendor, product,
658 * and revision properties matching a MP_DEVICE_PRODUCT_PROPERTIES instance
659 * will default to a device-specific load balance type.
661 MP_LOAD_BALANCE_TYPE defaultloadBalanceType
;
664 * The count of proprietary properties (less that or equal to eight)
667 MP_UINT32 proprietaryPropertyCount
;
670 * A list of proprietary property name/value pairs.
672 MP_PROPRIETARY_PROPERTY proprietaryProperties
[8];
674 } MP_PLUGIN_PROPERTIES
;
677 *******************************************************************************
679 * Declaration of the MP_DEVICE_PRODUCT_PROPERTIES structure.
681 * This structure is returned by the MP_GetDeviceProductProperties() API.
683 *******************************************************************************
685 typedef struct _MP_DEVICE_PRODUCT_PROPERTIES
690 MP_UINT32 supportedLoadBalanceTypes
;
692 } MP_DEVICE_PRODUCT_PROPERTIES
;
695 *******************************************************************************
697 * Declaration of the MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES structure.
699 * This structure is returned by the MP_GetMPLogicalUnitProperties() API.
701 *******************************************************************************
703 typedef struct _MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
709 MP_LOGICAL_UNIT_NAME_TYPE nameType
;
710 MP_CHAR deviceFileName
[256];
713 MP_LOAD_BALANCE_TYPE currentLoadBalanceType
;
714 MP_UINT32 logicalUnitGroupID
;
715 MP_XBOOL autoFailbackEnabled
;
716 MP_UINT32 failbackPollingRateMax
;
717 MP_UINT32 currentFailbackPollingRate
;
718 MP_XBOOL autoProbingEnabled
;
719 MP_UINT32 probingPollingRateMax
;
720 MP_UINT32 currentProbingPollingRate
;
721 MP_UINT32 proprietaryPropertyCount
;
722 MP_PROPRIETARY_PROPERTY proprietaryProperties
[8];
724 } MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
;
727 *******************************************************************************
729 * Declaration of the MP_PATH_LOGICAL_UNIT_PROPERTIES structure.
731 * This structure is returned by the MP_GetPathLogicalUnitProperties() API.
733 *******************************************************************************
735 typedef struct _MP_PATH_LOGICAL_UNIT_PROPERTIES
738 MP_PATH_STATE pathState
;
740 MP_OID initiatorPortOid
;
741 MP_OID targetPortOid
;
742 MP_OID logicalUnitOid
;
743 MP_UINT64 logicalUnitNumber
;
744 MP_CHAR deviceFileName
[256];
746 MP_UINT32 portNumber
;
748 } MP_PATH_LOGICAL_UNIT_PROPERTIES
;
751 *******************************************************************************
753 * Declaration of the MP_INITIATOR_PORT_PROPERTIES structure.
755 * This structure is returned by the MP_GetInitiatorPortProperties() API.
757 *******************************************************************************
759 typedef struct _MP_INITIATOR_PORT_PROPERTIES
762 MP_PORT_TRANSPORT_TYPE portType
;
763 MP_CHAR osDeviceFile
[256];
764 MP_WCHAR osFriendlyName
[256];
766 } MP_INITIATOR_PORT_PROPERTIES
;
769 *******************************************************************************
771 * Declaration of the MP_TARGET_PORT_PROPERTIES structure.
773 * This structure is returned by the MP_GetTargetPortProperties() API.
775 *******************************************************************************
777 typedef struct _MP_TARGET_PORT_PROPERTIES
780 MP_UINT32 relativePortID
;
782 } MP_TARGET_PORT_PROPERTIES
;
785 *******************************************************************************
787 * Declaration of the MP_TARGET_PORT_GROUP_PROPERTIES structure.
789 * This structure is returned by the MP_GetTargetPortGroupProperties() API.
791 *******************************************************************************
793 typedef struct _MP_TARGET_PORT_GROUP_PROPERTIES
795 MP_ACCESS_STATE_TYPE accessState
;
796 MP_BOOL explicitFailover
;
797 MP_BOOL supportsLuAssignment
;
798 MP_BOOL preferredLuPath
;
801 } MP_TARGET_PORT_GROUP_PROPERTIES
;
804 *******************************************************************************
806 * Declaration of the MP_TPG_STATE_PAIR structure.
808 * This structure is used as an argument for the MP_SetTPGAcess() API.
810 *******************************************************************************
812 typedef struct _MP_TPG_STATE_PAIR
815 MP_ACCESS_STATE_TYPE desiredState
;
820 *******************************************************************************
822 * Declaration of call back function type for event support
824 *******************************************************************************
826 typedef void (* MP_OBJECT_PROPERTY_FN
) (
827 MP_OID_LIST
*pOidList
, void *pCallerData
830 typedef void (* MP_OBJECT_VISIBILITY_FN
) (
831 MP_BOOL becomingVisible
, MP_OID_LIST
*pOidList
, void *pCallerData
838 ******************************************************************************
840 * The APIs for property and object related discovery.
842 * - MP_GetLibraryProperties
843 * - MP_GetPluginOidList
844 * - MP_GetPluginProperties
845 * - MP_GetAssociatedPluginOid
847 * - MP_GetDeviceProductOidList
848 * - MP_GetDeviceProductProperties
849 * - MP_GetInitiatorPortOidList
850 * - MP_GetInitiatorPortProperties
851 * - MP_GetMultipathLus
852 * - MP_GetMPLogicalUnitProperties
853 * - MP_GetAssociatedPathOidList
854 * - MP_GetPathLogicalUnitProperties
855 * - MP_GetAssociatedTPGOidList
856 * - MP_GetTargetPortGroupProperties
857 * - MP_GetMPLuOidListFromTPG
858 * - MP_GetProprietaryLoadBalanceOidList
859 * - MP_GetProprietaryLoadBalanceProperties
860 * - MP_GetTargetPortOidList
861 * - MP_GetTargetPortProperties
863 ******************************************************************************
867 *******************************************************************************
869 * Gets the properties of the MP API library that is being used.
872 * A pointer to an MP_LIBRARY_PROPERTIES structure allocated by
873 * the caller. On successful return this structure will contain the
874 * properties of the MP API library.
876 * @return An MP_STATUS indicating if the operation was successful or if
879 * @retval MP_STATUS_SUCCESS
880 * Returned if the library properties were successfully returned.
882 * @retval MP_STATUS_INVALID_PARAMETER
883 * Returned if ppList pointer passed as placeholder for holding the
884 * library properties is found to be invalid.
886 * @retval MP_STATUS_UNSUPPORTED
887 * Returned when the implementation does not support the API.
889 ******************************************************************************
891 MP_STATUS
MP_GetLibraryProperties(
892 MP_LIBRARY_PROPERTIES
*pProps
896 ******************************************************************************
898 * Gets a list of the object IDs of all currently loaded plugins.
901 * A pointer to a pointer to an MP_OID_LIST. On successful
902 * return this will contain a pointer to an @ref MP_OID_LIST
903 * which contains the object IDs of all of the plugins currently
904 * loaded by the library.
906 * @return MP_STATUS indicating if the operation was successful or
907 * if an error occurred.
909 * @retval MP_STATUS_INVALID_OBJECT_TYPE
910 * Returned if oid does not specify any valid object type. This is
911 * most likely to happen if an uninitialized object ID is passed to
914 * @retval MP_STATUS_INVALID_PARAMETER
915 * Returned if ppList is NULL or specifies a memory area to which data
916 * cannot be written. MP_STATUS_SUCCESS Returned when the operation is
919 * @retval MP_STATUS_INSUFFICIENT_MEMORY
920 * Returned when memory allocation failure occurs*
922 * @retval MP_STATUS_SUCCESS
923 * Returned if the plugin ID list was successfully returned.
925 ******************************************************************************
927 MP_STATUS
MP_GetPluginOidList(
932 *******************************************************************************
934 * Gets the properties of the specified vendor plugin.
937 * The ID of the plugin whose properties are being retrieved.
940 * A pointer to an @ref MP_PLUGIN_PROPERTIES structure allocated by
941 * the caller. On successful return this will contain the properties
942 * of the plugin specified by pluginOid.
944 * @return An MP_STATUS indicating if the operation was successful or if an
947 * @retval MP_STATUS_SUCCESS
948 * Returned if the plugin properties were successfully returned.
950 * @retval MP_STATUS_INVALID_OBJECT_TYPE
951 * Returned if oid does not specify any valid object type.
953 * @retval MP_STATUS_OBJECT_NOT_FOUND
954 * Returned if oid has an owner that is not currently known to
957 * @retval MP_STATUS_INVALID_PARAMETER
958 * Returned if 'pProps' is NULL or specifies a memory area to
959 * which data cannot be written.
961 *******************************************************************************
963 MP_STATUS
MP_GetPluginProperties(
965 MP_PLUGIN_PROPERTIES
*pProps
970 *******************************************************************************
972 * Gets the object ID for the plugin associated with the specified object ID.
975 * The object ID of an object that has been received from a previous
979 * A pointer to an MP_OID structure allocated by the caller. On
980 * successful return this will contain the object ID of the plugin
981 * associated with the object specified by @a objectId.
983 * @return An MP_STATUS indicating if the operation was successful or if
986 * @retval MP_STATUS_SUCCESS
987 * Returned if the associated plugin ID was successfully returned.
989 * @retval MP_STATUS_OBJECT_NOT_FOUND
990 * Returned if oid does not specify a plugin that is currently known to
993 * @retval MP_STATUS_INVALID_PARAMETER
994 * Returned if 'oid' specifies an object not owned by a plugin or
995 * if pPluginOid is NULL or specifies a memory area to which data
998 * @retval MP_STATUS_INVALID_OBJECT_TYPE
999 * Returned if 'oid' specifies an object with an invalid type.
1001 *******************************************************************************
1003 MP_STATUS
MP_GetAssociatedPluginOid(
1010 *******************************************************************************
1012 * Gets the object type of an initialized object ID.
1015 * The object ID of an object that has been received from a previous
1018 * @param pObjectType
1019 * A pointer to an MP_OBJECT_TYPE variable allocated by the caller.
1020 * On successful return this will contain the object type of oid.
1022 * @return An MP_STATUS indicating if the operation was successful or
1023 * if an error occurred.
1025 * @retval MP_STATUS_OBJECT_NOT_FOUND
1026 * Returned if oid has an owner that is not currently known to
1029 * @retval MP_STATUS_INVALID_PARAMETER
1030 * Returned if oid does not specify any valid object type.
1032 * @retval MP_STATUS_SUCCESS
1033 * Returned when the operation is successful.
1035 *******************************************************************************
1037 MP_STATUS
MP_GetObjectType(
1039 MP_OBJECT_TYPE
*pObjectType
1044 *******************************************************************************
1046 * Gets a list of the object IDs of all the device product properties
1047 * associated with this plugin.
1050 * The object ID of plugin.
1053 * A pointer to a pointer to an MP_OID_LIST structure.
1054 * On a successful return, this will contain a pointer to
1055 * an MP_OID_LIST that contains the object IDs of all the device
1056 * product descriptors associated with the specified plugin.
1058 * @return An MP_STATUS indicating if the operation was successful or if
1059 * an error occurred.
1061 * @retval MP_STATUS_SUCCESS
1062 * Returned when the operation is successful.
1064 * @retval MP_STATUS_INVALID_PARAMETER
1065 * Returned if ppList pointer passed as placeholder for holding
1066 * the device product list is found to be invalid.
1068 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1069 * Returned if oid does not specify any valid object type.
1071 * @retval MP_STATUS_FAILED
1072 * Returned when the plugin for the specified oid is not found.
1074 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1075 * Returned when memory allocation failure occurs
1077 * @retval MP_STATUS_UNSUPPORTED
1078 * Returned when the API is not supported.
1080 *******************************************************************************
1082 MP_STATUS
MP_GetDeviceProductOidList(
1084 MP_OID_LIST
**ppList
1088 *******************************************************************************
1090 * Gets the device product properties of the specified plugin oid.
1093 * The object ID of the plugin.
1096 * A pointer to an MP_DEVICE_PRODUCT_PROPERTIES structure
1097 * allocated by the caller. On successful return it will contain
1098 * a pointer to an MP_DEVICE_PRODUCT_PROPERTIES structure allocated
1101 * @return An MP_STATUS indicating if the operation was successful or if
1102 * an error occurred.
1104 * @retval MP_STATUS_SUCCESS
1105 * Returned when the operation is successful.
1107 * @retval MP_STATUS_INVALID_PARAMETER
1108 * Returned if ppProps pointer passed as placeholder for holding
1109 * the device product properties is found to be invalid.
1111 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1112 * Returned if oid does not specify any valid object type.
1114 * @retval MP_STATUS_FAILED
1115 * Returned when the plugin for the specified oid is not found.
1117 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1118 * Returned when memory allocation failure occurs
1120 * @retval MP_STATUS_UNSUPPORTED
1121 * Returned when the API is not supported.
1123 *******************************************************************************
1125 MP_STATUS
MP_GetDeviceProductProperties(
1127 MP_DEVICE_PRODUCT_PROPERTIES
*pProps
1131 *******************************************************************************
1133 * Gets a list of the object IDs of all the initiator ports associated
1137 * The object ID of plugin.
1140 * A pointer to a pointer to an MP_OID_LIST structure.
1141 * On a successful return, this will contain a pointer to
1142 * an MP_OID_LIST that contains the object IDs of all the initiator
1143 * ports associated with the specified plugin.
1145 * @return An MP_STATUS indicating if the operation was successful or if
1146 * an error occurred.
1148 * @retval MP_STATUS_SUCCESS
1149 * Returned when the operation is successful.
1151 * @retval MP_STATUS_INVALID_PARAMETER
1152 * Returned if ppList pointer passed as placeholder for holding
1153 * the initiator port list is found to be invalid.
1155 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1156 * Returned if oid does not specify any valid object type.
1158 * @retval MP_STATUS_FAILED
1159 * Returned when the plugin for the specified oid is not found.
1161 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1162 * Returned when memory allocation failure occurs
1164 * @retval MP_STATUS_UNSUPPORTED
1165 * Returned when the API is not supported.
1167 *******************************************************************************
1169 MP_STATUS
MP_GetInitiatorPortOidList(
1171 MP_OID_LIST
**ppList
1175 *******************************************************************************
1177 * Gets the properties of the specified initiator port.
1180 * The object ID of the initiator port.
1183 * A pointer to an MP_INITIATOR_PORT_PROPERTIES structure
1184 * allocated by the caller. On successful return, this structure
1185 * will contain the properties of the port specified by oid.
1187 * @return An MP_STATUS indicating if the operation was successful or if
1188 * an error occurred.
1190 * @retval MP_STATUS_SUCCESS
1191 * Returned when the operation is successful.
1193 * @retval MP_STATUS_INVALID_PARAMETER
1194 * Returned if pProps is NULL or specifies a memory area to
1195 * which data cannot be written.
1197 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1198 * Returned if oid does not specify any valid object type.
1200 * @retval MP_STATUS_OBJECT_NOT_FOUND
1201 * Returned if oid has an owner that is not currently known to
1204 *******************************************************************************
1206 MP_STATUS
MP_GetInitiatorPortProperties(
1208 MP_INITIATOR_PORT_PROPERTIES
*pProps
1212 *******************************************************************************
1214 * Gets a list of multipath logical units associated to a plugin.
1217 * The object ID of plugin.
1220 * A pointer to a pointer to an MP_OID_LIST structure.
1221 * On a successful return, this will contain a pointer to
1222 * an MP_OID_LIST that contains the object IDs of all the multipath
1223 * logical units associated with the specified plugin.
1225 * @return An MP_STATUS indicating if the operation was successful or if
1226 * an error occurred.
1228 * @retval MP_STATUS_SUCCESS
1229 * Returned when the operation is successful.
1231 * @retval MP_STATUS_INVALID_PARAMETER
1232 * Returned if ppList pointer passed as placeholder for holding
1233 * the multipath logical unit list is found to be invalid.
1235 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1236 * Returned if oid does not specify any valid object type.
1238 * @retval MP_STATUS_FAILED
1239 * Returned when the plugin for the specified oid is not found.
1241 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1242 * Returned when memory allocation failure occurs
1244 * @retval MP_STATUS_UNSUPPORTED
1245 * Returned when the API is not supported.
1247 *******************************************************************************
1249 MP_STATUS
MP_GetMultipathLus(
1251 MP_OID_LIST
**ppList
1255 *******************************************************************************
1257 * Gets the properties of the specified logical unit.
1260 * The object ID of the multipath logical unit.
1263 * A pointer to an MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES structure
1264 * allocated by the caller. On successful return, this structure
1265 * will contain the properties of the port specified by oid.
1267 * @return An MP_STATUS indicating if the operation was successful or if
1268 * an error occurred.
1270 * @retval MP_STATUS_SUCCESS
1271 * Returned when the operation is successful.
1273 * @retval MP_STATUS_INVALID_PARAMETER
1274 * Returned if pProps is NULL or specifies a memory area to
1275 * which data cannot be written.
1277 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1278 * Returned if oid does not specify any valid object type.
1280 * @retval MP_STATUS_OBJECT_NOT_FOUND
1281 * Returned if oid has an owner that is not currently known to
1284 *******************************************************************************
1286 MP_STATUS
MP_GetMPLogicalUnitProperties(
1288 MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
*pProps
1292 *******************************************************************************
1294 * Gets a list of the object IDs of all the path logical units associated
1295 * with the specified multipath logical unit, initiator port, or target port.
1298 * The object ID of multipath logical unit, initiator port, or
1302 * A pointer to a pointer to an MP_OID_LIST structure.
1303 * On a successful return, this will contain a pointer to
1304 * an MP_OID_LIST that contains the object IDs of all the mp path
1305 * logical units associated with the specified OID.
1307 * @return An MP_STATUS indicating if the operation was successful or if
1308 * an error occurred.
1310 * @retval MP_STATUS_SUCCESS
1311 * Returned when the operation is successful.
1313 * @retval MP_STATUS_INVALID_PARAMETER
1314 * Returned if ppList pointer passed as placeholder for holding
1315 * the device product list is found to be invalid.
1317 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1318 * Returned if oid does not specify any valid object type.
1320 * @retval MP_STATUS_FAILED
1321 * Returned when the plugin for the specified oid is not found.
1323 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1324 * Returned when memory allocation failure occurs
1326 * @retval MP_STATUS_OBJECT_NOT_FOUND
1327 * Returned if oid has an owner that is not currently known to
1330 *******************************************************************************
1332 MP_STATUS
MP_GetAssociatedPathOidList(
1334 MP_OID_LIST
**ppList
1338 *******************************************************************************
1340 * Gets the properties of the specified path logical unit.
1343 * The object ID of the path logical unit.
1346 * A pointer to an MP_PATH_LOGICAL_UNIT_PROPERTIES structure
1347 * allocated by the caller. On successful return, this structure
1348 * will contain the properties of the port specified by oid.
1350 * @return An MP_STATUS indicating if the operation was successful or if
1351 * an error occurred.
1353 * @retval MP_STATUS_SUCCESS
1354 * Returned when the operation is successful.
1356 * @retval MP_STATUS_INVALID_PARAMETER
1357 * Returned if pProps is NULL or specifies a memory area to
1358 * which data cannot be written.
1360 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1361 * Returned if oid does not specify any valid object type.
1363 * @retval MP_STATUS_OBJECT_NOT_FOUND
1364 * Returned if oid has an owner that is not currently known to
1367 *******************************************************************************
1369 MP_STATUS
MP_GetPathLogicalUnitProperties(
1371 MP_PATH_LOGICAL_UNIT_PROPERTIES
*pProps
1375 *******************************************************************************
1377 * Gets a list of the object IDs of all the target port group associated
1378 * with the specified multipath logical unit.
1381 * The object ID of the multiple logical unit.
1384 * A pointer to a pointer to an MP_OID_LIST structure.
1385 * On a successful return, this will contain a pointer to
1386 * an MP_OID_LIST that contains the object IDs of all the target
1387 * port group associated with the specified multipath logical unit.
1389 * @return An MP_STATUS indicating if the operation was successful or if
1390 * an error occurred.
1392 * @retval MP_STATUS_SUCCESS
1393 * Returned when the operation is successful.
1395 * @retval MP_STATUS_INVALID_PARAMETER
1396 * Returned if ppList pointer passed as placeholder for holding
1397 * the target port group list is found to be invalid.
1399 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1400 * Returned if oid does not specify any valid object type.
1402 * @retval MP_STATUS_FAILED
1403 * Returned when the plugin for the specified oid is not found.
1405 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1406 * Returned when memory allocation failure occurs
1409 *******************************************************************************
1411 MP_STATUS
MP_GetAssociatedTPGOidList(
1413 MP_OID_LIST
**ppList
1417 *******************************************************************************
1419 * Gets the properties of the specified target port group.
1422 * The object ID of the target port group.
1425 * A pointer to an MP_TARGET_PORT_GROUP_PROPERTIES structure
1426 * allocated by the caller. On successful return, this structure
1427 * will contain the properties of the port specified by oid.
1429 * @return An MP_STATUS indicating if the operation was successful or if
1430 * an error occurred.
1432 * @retval MP_STATUS_SUCCESS
1433 * Returned when the operation is successful.
1435 * @retval MP_STATUS_INVALID_PARAMETER
1436 * Returned if pProps is NULL or specifies a memory area to
1437 * which data cannot be written.
1439 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1440 * Returned if oid does not specify any valid object type.
1442 * @retval MP_STATUS_OBJECT_NOT_FOUND
1443 * Returned if oid has an owner that is not currently known to
1446 *******************************************************************************
1448 MP_STATUS
MP_GetTargetPortGroupProperties(
1450 MP_TARGET_PORT_GROUP_PROPERTIES
*pProps
1454 *******************************************************************************
1456 * Gets a list of multipath logical units associated with the specific target
1460 * The object ID of the target port group.
1463 * A pointer to a pointer to an MP_OID_LIST structure.
1464 * On a successful return, this will contain a pointer to
1465 * an MP_OID_LIST that contains the object IDs of all the multipath
1466 * logical units associated with the specified target port group.
1468 * @return An MP_STATUS indicating if the operation was successful or if
1469 * an error occurred.
1471 * @retval MP_STATUS_SUCCESS
1472 * Returned when the operation is successful.
1474 * @retval MP_STATUS_INVALID_PARAMETER
1475 * Returned if ppList pointer passed as placeholder for holding
1476 * the multipath logical unit list is found to be invalid.
1478 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1479 * Returned if oid does not specify any valid object type.
1481 * @retval MP_STATUS_FAILED
1482 * Returned when the plugin for the specified oid is not found.
1484 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1485 * Returned when memory allocation failure occurs
1487 *******************************************************************************
1489 MP_STATUS
MP_GetMPLuOidListFromTPG(
1491 MP_OID_LIST
**ppList
1495 *******************************************************************************
1497 * Gets a list of the object IDs of all the proprietary load balance
1498 * algorithms associated with this plugin.
1501 * The object ID of the plugin.
1504 * A pointer to a pointer to an MP_OID_LIST structure.
1505 * On a successful return, this will contain a pointer to
1506 * an MP_OID_LIST that contains the object IDs of all the proprietary
1507 * load balance algorithms associated with the specified plugin.
1509 * @return An MP_STATUS indicating if the operation was successful or if
1510 * an error occurred.
1512 * @retval MP_STATUS_SUCCESS
1513 * Returned when the operation is successful.
1515 * @retval MP_STATUS_INVALID_PARAMETER
1516 * Returned if ppList pointer passed as placeholder for holding
1517 * the proprietary load balance oid list is found to be invalid.
1519 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1520 * Returned if oid does not specify any valid object type.
1522 * @retval MP_STATUS_FAILED
1523 * Returned when the plugin for the specified oid is not found.
1525 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1526 * Returned when memory allocation failure occurs
1528 * @retval MP_STATUS_UNSUPPORTED
1529 * Returned when the API is not supported.
1531 *******************************************************************************
1533 MP_STATUS
MP_GetProprietaryLoadBalanceOidList(
1535 MP_OID_LIST
**ppList
1539 *******************************************************************************
1541 * Gets the properties of the specified load balance properties structure.
1544 * The object ID of the proprietary load balance structure.
1547 * A pointer to an MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES structure
1548 * allocated by the caller. On successful return, this structure
1549 * will contain the properties of the port specified by oid.
1551 * @return An MP_STATUS indicating if the operation was successful or if
1552 * an error occurred.
1554 * @retval MP_STATUS_SUCCESS
1555 * Returned when the operation is successful.
1557 * @retval MP_STATUS_INVALID_PARAMETER
1558 * Returned if pProps is NULL or specifies a memory area to
1559 * which data cannot be written.
1561 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1562 * Returned if oid does not specify any valid object type.
1564 * @retval MP_STATUS_OBJECT_NOT_FOUND
1565 * Returned if oid has an owner that is not currently known to
1568 *******************************************************************************
1570 MP_STATUS
MP_GetProprietaryLoadBalanceProperties(
1572 MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
*pProps
1576 *******************************************************************************
1578 * Gets a list of the object IDs of the target ports in the specified target
1582 * The object ID of the target port group.
1585 * A pointer to a pointer to an MP_OID_LIST structure.
1586 * On a successful return, this will contain a pointer to
1587 * an MP_OID_LIST that contains the object IDs of all the target ports
1588 * associated with the specified target port group.
1590 * @return An MP_STATUS indicating if the operation was successful or if
1591 * an error occurred.
1593 * @retval MP_STATUS_SUCCESS
1594 * Returned when the operation is successful.
1596 * @retval MP_STATUS_INVALID_PARAMETER
1597 * Returned if ppList pointer passed as placeholder for holding
1598 * the multipath logical unit list is found to be invalid.
1600 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1601 * Returned if oid does not specify any valid object type.
1603 * @retval MP_STATUS_FAILED
1604 * Returned when the plugin for the specified oid is not found.
1606 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1607 * Returned when memory allocation failure occurs
1609 *******************************************************************************
1611 MP_STATUS
MP_GetTargetPortOidList(
1613 MP_OID_LIST
**ppList
1617 *******************************************************************************
1619 * Gets the properties of the specified target port.
1622 * The object ID of the target port.
1625 * A pointer to an MP_TARGET_PORT_PROPERTIES structure
1626 * allocated by the caller. On successful return, this structure
1627 * will contain the properties of the port specified by oid.
1629 * @return An MP_STATUS indicating if the operation was successful or if
1630 * an error occurred.
1632 * @retval MP_STATUS_SUCCESS
1633 * Returned when the operation is successful.
1635 * @retval MP_STATUS_INVALID_PARAMETER
1636 * Returned if pProps is NULL or specifies a memory area to
1637 * which data cannot be written.
1639 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1640 * Returned if oid does not specify any valid object type.
1642 * @retval MP_STATUS_OBJECT_NOT_FOUND
1643 * Returned if oid has an owner that is not currently known to
1646 *******************************************************************************
1648 MP_STATUS
MP_GetTargetPortProperties(
1650 MP_TARGET_PORT_PROPERTIES
*pProps
1654 ******************************************************************************
1656 * The APIs for path management.
1658 * - MP_AssignLogicalUnitToTPG
1659 * - MP_SetOverridePath
1660 * - MP_CancelOverridePath
1661 * - MP_EnableAutoFailback
1662 * - MP_DisableAutoFailback
1663 * - MP_EnableAutoProbing
1664 * - MP_DisableAutoProbing
1667 * - MP_SetLogicalUnitLoadBalanceType
1668 * - MP_SetPluginLoadBalanceType
1669 * - MP_SetPathWeight
1670 * - MP_SetFailbackPollingRates
1671 * - MP_SetProbingPollingRates
1672 * - MP_SetProprietaryProperties
1675 ******************************************************************************
1679 *******************************************************************************
1681 * Assign a multipath logical unit to a target port group.
1684 * An MP_TARGET_PORT_GROUP oid. The target port group currently in
1685 * active access state that the administrator would like the LU
1689 * An MP_MULTIPATH_LOGICAL_UNIT oid.
1691 * @return An MP_STATUS indicating if the operation was successful or if
1692 * an error occurred.
1694 * @retval MP_STATUS_SUCCESS
1695 * Returned when the operation is successful.
1697 * @retval MP_STATUS_INVALID_PARAMETER
1698 * Returned when luOid is not associated with tpgOid.
1700 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1701 * Returned if oid does not specify any valid object type.
1703 * @retval MP_STATUS_OBJECT_NOT_FOUND
1704 * Returned if oid has an owner that is not currently known to
1707 *******************************************************************************
1709 MP_STATUS
MP_AssignLogicalUnitToTPG(
1715 *******************************************************************************
1717 * Manually override the path for a logical unit. The path exclusively used to
1718 * access the logical unit until cleared.
1720 * @param logicalUnitOid
1721 * The object ID of the multipath logical unit.
1724 * The object ID of the path logical unit.
1726 * @return An MP_STATUS indicating if the operation was successful or if
1727 * an error occurred.
1729 * @retval MP_STATUS_SUCCESS
1730 * Returned when the operation is successful.
1732 * @retval MP_STATUS_INVALID_PARAMETER
1733 * Returned if the oid of the object is not valid
1735 * @retval MP_STATUS_UNSUPPORTED
1736 * Returned when the implementation does not support the API
1738 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1739 * Returned if oid does not specify any valid object type.
1741 * @retval MP_STATUS_PATH_NONOPERATIONAL
1742 * Returned when the driver cannot communicate through selected path.
1744 *******************************************************************************
1746 MP_STATUS
MP_SetOverridePath(
1747 MP_OID logicalUnitOid
,
1752 *******************************************************************************
1754 * Cancel a path override and re-enable load balancing.
1757 * An MP_MULTIPATH_LOGICAL_UNIT oid.
1759 * @return An MP_STATUS indicating if the operation was successful or if
1760 * an error occurred.
1762 * @retval MP_STATUS_SUCCESS
1763 * Returned when the operation is successful.
1765 * @retval MP_STATUS_INVALID_PARAMETER
1766 * Returned if MP_MULTIPATH_LOGICAL_UNIT with the luOid is not found.
1768 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1769 * Returned if oid does not specify any valid object type.
1771 * @retval MP_STATUS_OBJECT_NOT_FOUND
1772 * Returned if oid has an owner that is not currently known to
1775 *******************************************************************************
1777 MP_STATUS
MP_CancelOverridePath(
1778 MP_OID logicalUnitOid
1782 *******************************************************************************
1784 * Enables Auto-failback.
1787 * The oid of the plugin or the multipath logical unit.
1789 * @return An MP_STATUS indicating if the operation was successful or if
1790 * an error occurred.
1792 * @retval MP_STATUS_SUCCESS
1793 * Returned when the operation is successful.
1795 * @retval MP_STATUS_INVALID_PARAMETER
1796 * Returned if oid is NULL or specifies a memory area that is not
1797 * a valid plugin oid.
1799 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1800 * Returned if oid does not specify any valid object type.
1802 *******************************************************************************
1804 MP_STATUS
MP_EnableAutoFailback(
1809 *******************************************************************************
1811 * Disables Auto-failback.
1814 * The oid of the plugin or the multipath logical unit..
1816 * @return An MP_STATUS indicating if the operation was successful or if
1817 * an error occurred.
1819 * @retval MP_STATUS_SUCCESS
1820 * Returned when the operation is successful.
1822 * @retval MP_STATUS_INVALID_PARAMETER
1823 * Returned if oid is NULL or specifies a memory area that is not
1824 * a valid plugin oid.
1826 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1827 * Returned if oid does not specify any valid object type.
1829 *******************************************************************************
1831 MP_STATUS
MP_DisableAutoFailback(
1836 *******************************************************************************
1838 * Enables Auto-probing.
1841 * The oid of the plugin or the multipath logical unit.
1843 * @return An MP_STATUS indicating if the operation was successful or if
1844 * an error occurred.
1846 * @retval MP_STATUS_SUCCESS
1847 * Returned when the operation is successful.
1849 * @retval MP_STATUS_INVALID_PARAMETER
1850 * Returned if oid is NULL or specifies a memory area that is not
1851 * a valid plugin oid.
1853 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1854 * Returned if oid does not specify any valid object type.
1856 *******************************************************************************
1858 MP_STATUS
MP_EnableAutoProbing(
1863 *******************************************************************************
1865 * Disables Auto-probing.
1868 * The oid of the plugin or the multipath logical unit.
1870 * @return An MP_STATUS indicating if the operation was successful or if
1871 * an error occurred.
1873 * @retval MP_STATUS_SUCCESS
1874 * Returned when the operation is successful.
1876 * @retval MP_STATUS_INVALID_PARAMETER
1877 * Returned if oid is NULL or specifies a memory area that is not
1878 * a valid plugin oid.
1880 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1881 * Returned if oid does not specify any valid object type.
1883 *******************************************************************************
1885 MP_STATUS
MP_DisableAutoProbing(
1890 *******************************************************************************
1892 * Enables a path. This API may cause failover in a logical unit with
1893 * asymmetric access.
1896 * The oid of the path.
1898 * @return An MP_STATUS indicating if the operation was successful or if
1899 * an error occurred.
1901 * @retval MP_STATUS_SUCCESS
1902 * Returned when the operation is successful.
1904 * @retval MP_STATUS_INVALID_PARAMETER
1905 * Returned if oid is NULL or specifies a memory area that is not
1908 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1909 * Returned if oid does not specify any valid object type.
1911 *******************************************************************************
1913 MP_STATUS
MP_EnablePath(
1918 *******************************************************************************
1920 * Disables a path. This API may cause failover in a logical unit with
1921 * asymmetric access. This API may cause a logical unit to become unavailable.
1924 * The oid of the path.
1926 * @return An MP_STATUS indicating if the operation was successful or if
1927 * an error occurred.
1929 * @retval MP_STATUS_SUCCESS
1930 * Returned when the operation is successful.
1932 * @retval MP_STATUS_INVALID_PARAMETER
1933 * Returned if oid is NULL or specifies a memory area that is not
1936 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1937 * Returned if oid does not specify any valid object type.
1939 * @retval MP_STATUS_UNSUPPORTED
1940 * Returned when the API is not supported.
1942 * @retval MP_STATUS_TRY_AGAIN
1943 * Returned when path cannot be disabled at this time.
1945 * @retval MP_STATUS_NOT_PERMITTED
1946 * Returned when disabling thsi path would cause the login unit to
1947 * become unavailable.
1949 *******************************************************************************
1951 MP_STATUS
MP_DisablePath(
1956 *******************************************************************************
1958 * Set the multipath logical unit s load balancing policy.
1960 * @param logicalUnitoid
1961 * The object ID of the multipath logical unit.
1963 * @param loadBanlance
1964 * The desired load balance policy for the specified logical unit.
1966 * @return An MP_STATUS indicating if the operation was successful or if
1967 * an error occurred.
1969 * @retval MP_STATUS_SUCCESS
1970 * Returned when the operation is successful.
1972 * @retval MP_STATUS_INVALID_PARAMETER
1973 * Returned if no MP_MULTIPATH_LOGICAL_UNIT associated with
1974 * @ref ligicalUnitrOid is found or invalid MP_LOAD_BALANCE_TYPE is
1977 * @retval MP_STATUS_FAILED
1978 * Returned when the specified loadBalance type cannot be handled
1981 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1982 * Returned if oid does not specify any valid object type.
1984 *******************************************************************************
1986 MP_STATUS
MP_SetLogicalUnitLoadBalanceType(
1987 MP_OID logicalUnitOid
,
1988 MP_LOAD_BALANCE_TYPE loadBalance
1992 *******************************************************************************
1994 * Set the weight to be assigned to a particular path.
1997 * The object ID of the path logical unit.
2000 * weight that will be assigned to the path logical unit.
2002 * @return An MP_STATUS indicating if the operation was successful or if
2003 * an error occurred.
2005 * @retval MP_STATUS_SUCCESS
2006 * Returned when the operation is successful.
2008 * @retval MP_STATUS_OBJECT_NOT_FOUND
2009 * Returned when the MP Path specified by the PathOid could not be
2012 * @retval MP_STATUS_UNSUPPORTED
2013 * Returned when the implementation does not support the API
2015 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2016 * Returned if oid does not specify any valid object type.
2018 * @retval MP_STATUS_FAILED
2019 * Returned when the operation failed.
2021 * @retval MP_STATUS_INVALID_WEIGHT
2022 * Returned when the weight parameter is greater than the plugin's
2023 * maxWeight property.
2025 *******************************************************************************
2027 MP_STATUS
MP_SetPathWeight(
2033 *******************************************************************************
2035 * Set the default load balance policy for the plugin.
2038 * The object ID of the plugin
2040 * @param loadBalance
2041 * The desired default load balance policy for the specified plugin.
2043 * @return An MP_STATUS indicating if the operation was successful or if
2044 * an error occurred.
2046 * @retval MP_STATUS_SUCCESS
2047 * Returned when the operation is successful.
2049 * @retval MP_STATUS_OBJECT_NOT_FOUND
2050 * Returned when the the plugin specified by @ref oid could not be
2053 * @retval MP_STATUS_INVALID_PARAMETER
2054 * Returned if the oid of the object is not valid.
2056 * @retval MP_STATUS_UNSUPPORTED
2057 * Returned when the implementation does not support the API
2059 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2060 * Returned if oid does not specify any valid object type.
2062 * @retval MP_STATUS_FAILED
2063 * Returned when the specified loadBalance type cannot be handled
2066 *******************************************************************************
2068 MP_STATUS
MP_SetPluginLoadBalanceType(
2070 MP_LOAD_BALANCE_TYPE loadBalance
2074 *******************************************************************************
2076 * Set the failback polling rates. Setting both rates to zero disables polling.
2079 * The object ID of either the plugin or a multipath logical unit.
2081 * @param pollingRate
2082 * The value to be set in MP_PLUGIN_PROPERTIES current pollingRate or
2083 * MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES pollingRate.
2085 * @return An MP_STATUS indicating if the operation was successful or if
2086 * an error occurred.
2088 * @retval MP_STATUS_SUCCESS
2089 * Returned when the operation is successful.
2091 * @retval MP_STATUS_OBJECT_NOT_FOUND
2092 * Returned when the the plugin specified by @ref oid could not be
2095 * @retval MP_STATUS_INVALID_PARAMETER
2096 * Returned if one of the polling values is outside the range
2097 * supported by the driver.
2099 * @retval MP_STATUS_UNSUPPORTED
2100 * Returned when the implementation does not support the API
2102 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2103 * Returned if oid does not specify any valid object type.
2105 *******************************************************************************
2107 MP_STATUS
MP_SetFailbackPollingRate(
2109 MP_UINT32 pollingRate
2113 *******************************************************************************
2115 * Set the probing polling rates. Setting both rates to zero disables polling.
2118 * The object ID of either the plugin or a multipath logical unit.
2120 * @param pollingRate
2121 * The value to be set in MP_PLUGIN_PROPERTIES current pollingRate or
2122 * MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES pollingRate.
2124 * @return An MP_STATUS indicating if the operation was successful or if
2125 * an error occurred.
2127 * @retval MP_STATUS_SUCCESS
2128 * Returned when the operation is successful.
2130 * @retval MP_STATUS_OBJECT_NOT_FOUND
2131 * Returned when the the plugin specified by @ref oid could not be
2134 * @retval MP_STATUS_INVALID_PARAMETER
2135 * Returned if one of the polling values is outside the range
2136 * supported by the driver.
2138 * @retval MP_STATUS_UNSUPPORTED
2139 * Returned when the implementation does not support the API
2141 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2142 * Returned if oid does not specify any valid object type.
2144 *******************************************************************************
2146 MP_STATUS
MP_SetProbingPollingRate(
2148 MP_UINT32 pollingRate
2152 *******************************************************************************
2154 * Set proprietary properties in supported object instances.
2157 * The object ID of MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES,
2158 * MP_PLUGIN_PROPERTIES or MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES.
2161 * The number of valid items in pPropertyList.
2163 * @param pPropertyList
2164 * A pointer to an array of property name/value pairs. This array must
2165 * contain the same number of elements as count.
2167 * @return An MP_STATUS indicating if the operation was successful or if
2168 * an error occurred.
2170 * @retval MP_STATUS_SUCCESS
2171 * Returned when the operation is successful.
2173 * @retval MP_STATUS_OBJECT_NOT_FOUND
2174 * Returned when the the plugin specified by @ref oid could not be
2177 * @retval MP_STATUS_INVALID_PARAMETER
2178 * Returned if one of the polling values is outside the range
2179 * supported by the driver.
2181 * @retval MP_STATUS_UNSUPPORTED
2182 * Returned when the implementation does not support the API
2184 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2185 * Returned if oid does not specify any valid object type.
2187 *******************************************************************************
2189 MP_STATUS
MP_SetProprietaryProperties(
2192 MP_PROPRIETARY_PROPERTY
*pPropertyList
2196 *******************************************************************************
2198 * Set the access state for a list of target port groups. This allows
2199 * a client to force a failover or failback to a desired set of target port
2203 * The object ID of the logical unit where the command is sent.
2206 * The number of valid items in the pTpgStateList.
2208 * @param pTpgStateList
2209 * A pointer to an array of TPG/access-state values. This array must
2210 * contain the same number of elements as @ref count.
2212 * @return An MP_STATUS indicating if the operation was successful or if
2213 * an error occurred.
2215 * @retval MP_STATUS_SUCCESS
2216 * Returned when the operation is successful.
2218 * @retval MP_STATUS_OBJECT_NOT_FOUND
2219 * Returned when the MP_MULTIPATH_LOGICAL_UNIT associated with @ref
2220 * oid could not be found.
2222 * @retval MP_STATUS_INVALID_PARAMETER
2223 * Returned if pTpgStateList is null or if one of the TPGs referenced
2224 * in the list is not associated with the specified MP logical unit.
2226 * @retval MP_STATUS_UNSUPPORTED
2227 * Returned when the implementation does not support the API
2229 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2230 * Returned if oid does not specify any valid object type.
2232 * @retval MP_STATUS_ACCESS_STATE_INVALID
2233 * Returned if the target device returns a status indicating the caller
2234 * is attempting to establish an illegal combination of access states.
2236 * @retval MP_STATUS_FAILED
2237 * Returned if the underlying interface failed the commend for some
2238 * reason other than MP_STATUS_ACCESS_STATE_INVALID
2240 *******************************************************************************
2242 MP_STATUS
MP_SetTPGAccess(
2245 MP_TPG_STATE_PAIR
*pTpgStateList
2249 ******************************************************************************
2251 * The APIs that are associated with event support.
2253 * - MP_RegisterForObjectPropertyChanges
2254 * - MP_DeregisterForObjectPropertyChanges
2255 * - MP_RegisterForObjectVisibilityChanges
2256 * - MP_DeregisterForObjectVisibilityChanges
2258 ******************************************************************************
2262 *******************************************************************************
2264 * Registers a client function that is to be called
2265 * whenever the property of an an object changes.
2268 * A pointer to an MP_OBJECT_PROPERTY_FN function defined by the
2269 * client. On successful return this function will be called to
2270 * inform the client of objects that have had one or more properties
2274 * The type of object the client wishes to deregister for
2275 * property change callbacks. If null, then all objects types are
2278 * @param pCallerData
2279 * A pointer that is passed to the callback routine with each event.
2280 * This may be used by the caller to correlate the event to source of
2284 * A plugin oid that the client wishes to deregister for property change.
2286 * @return An MP_STATUS indicating if the operation was successful or if
2287 * an error occurred.
2289 * @retval MP_STATUS_SUCCESS
2290 * Returned when the operation is successful.
2292 * @retval MP_STATUS_INVALID_PARAMETER
2293 * Returned if pClientFn is NULL or specifies a memory area
2294 * that is not executable.
2296 * @retval MP_STATUS_FN_REPLACED
2297 * Returned when an existing client function is replaced with the one
2298 * specified in pClientFn.
2300 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2301 * Returned if objectType does not specify any valid object type.
2303 *******************************************************************************
2305 MP_STATUS
MP_RegisterForObjectPropertyChanges(
2306 MP_OBJECT_PROPERTY_FN pClientFn
,
2307 MP_OBJECT_TYPE objectType
,
2313 *******************************************************************************
2315 * Deregisters a previously registered client function that is to be invoked
2316 * whenever an object's property changes.
2319 * A pointer to an MP_OBJECT_PROPERTY_FN function defined by the
2320 * client that was previously registered using
2321 * the MP_RegisterForObjectPropertyChanges API. On successful return
2322 * this function will no longer be called to inform the client of
2323 * object property changes.
2326 * The type of object the client wishes to deregister for
2327 * property change callbacks. If null, then all objects types are
2331 * A plugin oid that the client wishes to deregister for property change.
2333 * @return An MP_STATUS indicating if the operation was successful or if
2334 * an error occurred.
2336 * @retval MP_STATUS_SUCCESS
2337 * Returned when the operation is successful.
2339 * @retval MP_STATUS_INVALID_PARAMETER
2340 * Returned if pClientFn is NULL or specifies a memory area
2341 * that is not executable.
2343 * @retval MP_STATUS_UNKNOWN_FN
2344 * Returned if pClientFn is not the same as the previously registered
2347 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2348 * Returned if objectType does not specify any valid object type.
2350 * @retval MP_STATUS_FAILED
2351 * Returned if pClientFn deregistration is not possible at this time.
2353 *******************************************************************************
2355 MP_STATUS
MP_DeregisterForObjectPropertyChanges(
2356 MP_OBJECT_PROPERTY_FN pClientFn
,
2357 MP_OBJECT_TYPE objectType
,
2362 *******************************************************************************
2364 * Registers a client function that is to be called
2365 * whenever a high level object appears or disappears.
2368 * A pointer to an MP_OBJECT_VISIBILITY_FN function defined by the
2369 * client. On successful return this function will be called to
2370 * inform the client of objects whose visibility has changed.
2373 * The type of object the client wishes to deregister for
2374 * property change callbacks. If null, then all objects types are
2377 * @param pCallerData
2378 * A pointer that is passed to the callback routine with each event.
2379 * This may be used by the caller to correlate the event to source of
2383 * A plugin oid that the client wishes to deregister for property change.
2385 * @return An MP_STATUS indicating if the operation was successful or if
2386 * an error occurred.
2388 * @retval MP_STATUS_SUCCESS
2389 * Returned when the operation is successful.
2391 * @retval MP_STATUS_INVALID_PARAMETER
2392 * Returned if pClientFn is NULL or specifies a memory area
2393 * that is not executable.
2395 * @retval MP_STATUS_FN_REPLACED
2396 * Returned when an existing client function is replaced with the one
2397 * specified in pClientFn.
2399 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2400 * Returned if objectType does not specify any valid object type.
2402 *******************************************************************************
2404 MP_STATUS
MP_RegisterForObjectVisibilityChanges(
2405 MP_OBJECT_VISIBILITY_FN pClientFn
,
2406 MP_OBJECT_TYPE objectType
,
2412 *******************************************************************************
2414 * Deregisters a previously registered client function that is to be invoked
2415 * whenever a high level object appears or disappears.
2418 * A pointer to an MP_OBJECT_VISIBILITY_FN function defined by the
2419 * client that was previously registered using
2420 * the MP_RegisterForObjectVisibilityChanges API. On successful return
2421 * this function will no longer be called to inform the client of
2422 * object property changes.
2425 * The type of object the client wishes to deregister for visibility
2426 * change callbacks. If null, then all objects types are
2430 * A plugin oid that the client wishes to deregister for property change.
2432 * @return An MP_STATUS indicating if the operation was successful or if
2433 * an error occurred.
2435 * @retval MP_STATUS_SUCCESS
2436 * Returned when the operation is successful.
2438 * @retval MP_STATUS_INVALID_PARAMETER
2439 * Returned if pClientFn is NULL or specifies a memory area
2440 * that is not executable.
2442 * @retval MP_STATUS_UNKNOWN_FN
2443 * Returned if pClientFn is not the same as the previously registered
2446 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2447 * Returned if objectType does not specify any valid object type.
2449 * @retval MP_STATUS_FAILED
2450 * Returned if pClientFn deregistration is not possible at this time.
2452 *******************************************************************************
2454 MP_STATUS
MP_DeregisterForObjectVisibilityChanges(
2455 MP_OBJECT_VISIBILITY_FN pClientFn
,
2456 MP_OBJECT_TYPE objectType
,
2461 ******************************************************************************
2467 * - MP_RegisterPlugin
2468 * - MP_DeregisterPlugin
2470 ******************************************************************************
2474 *******************************************************************************
2476 * Compare two Oids for equality to see whether they refer to the same object.
2484 * @return An MP_STATUS indicating if the operation was successful or if
2485 * an error occurred.
2487 * @retval MP_STATUS_SUCCESS
2488 * Returned when the two Oids do refer to the same object.
2490 * @retval MP_STATUS_FAILED
2491 * Returned if the Oids don't compare.
2493 *******************************************************************************
2495 MP_STATUS
MP_CompareOIDs(
2501 *******************************************************************************
2503 * Frees memory returned by an MP API.
2506 * A pointer to the memory returned by an MP API. On successful
2507 return, the allocated memory is freed.
2509 * @return An MP_STATUS indicating if the operation was successful or if
2510 * an error occurred.
2512 * @retval MP_STATUS_SUCCESS
2513 * Returned when pPluginId is deregistered successfully.
2515 * @retval MP_STATUS_INVALID_PARAMETER
2516 * Returned if pMemory is NULL or specifies a memory area to which
2517 * data cannot be written.
2519 *******************************************************************************
2521 MP_STATUS
MP_FreeOidList(
2522 MP_OID_LIST
*pOidList
2526 *******************************************************************************
2528 * Registers a plugin with common library. The implementation of this routine
2529 * is based on configuration file /etc/mpapi.conf that contains a list of
2533 * A pointer to the key name shall be the reversed domain name of
2534 * the vendor followed by followed by the vendor specific name for
2535 * the plugin that uniquely identifies the plugin.
2538 * The full path to the plugin library.
2540 * @return An MP_STATUS indicating if the operation was successful or if
2541 * an error occurred.
2543 * @retval MP_STATUS_SUCCESS
2544 * Returned when pPluginId is deregistered successfully.
2546 * @retval MP_STATUS_INVALID_PARAMETER
2547 * Returned if pPluginId is NULL or specifies a memory area that
2548 * is not executable.
2550 * @retval MP_STATUS_FAILED
2551 * Returned if pClientFn deregistration is not possible at this time.
2553 *******************************************************************************
2555 MP_STATUS
MP_RegisterPlugin(
2556 MP_WCHAR
*pPluginId
,
2561 *******************************************************************************
2563 * Deregisters a plugin from the common library.
2566 * A pointer to a Plugin ID previously registered using
2567 * the MP_RegisterPlugin API..
2569 * @return An MP_STATUS indicating if the operation was successful or if
2570 * an error occurred.
2572 * @retval MP_STATUS_SUCCESS
2573 * Returned when pPluginId is deregistered successfully.
2575 * @retval MP_STATUS_INVALID_PARAMETER
2576 * Returned if pPluginId is NULL or specifies a memory area that
2577 * is not executable.
2579 * @retval MP_STATUS_FAILED
2580 * Returned if pClientFn deregistration is not possible at this time.
2582 *******************************************************************************
2584 MP_STATUS
MP_DeregisterPlugin(