[libvirt] RFC [2/3]: The lock manager plugin driver API
Eric Blake
eblake at redhat.com
Fri Sep 10 20:01:16 UTC 2010
On 09/10/2010 10:00 AM, Daniel P. Berrange wrote:
>
> typedef struct _virLockManagerDriver virLockManagerDriver;
> typedef virLockManagerDriver *virLockManagerDriverPtr;
>
> /* Which callbacks are supported */
> typedef enum {
> VIR_LOCK_MANAGER_DRIVER_RESOURCES = (1<< 0),
> VIR_LOCK_MANAGER_DRIVER_MIGRATE = (1<< 0),
Same value?
> VIR_LOCK_MANAGER_DRIVER_HOTPLUG = (1<< 1),
> };
>
> struct _virLockManagerDriver {
> /**
> * @version: the newest implemented plugin ABI version
> * @flags: the implemented plugin optional extras
> */
> unsigned int version;
> unsigned int flags;
>
> /**
> * load_drv:
> * @version: the libvirt requested plugin ABI version
> * @flags: the libvirt requested plugin optional extras
> *
> * Allow the plugin to validate the libvirt requested
> * plugin version / flags. This allows it to reject
> * use of versions which are too old. A plugin may
> * be loaded multiple times, for different libvirt
> * drivers
> *
> * Returns -1 if the requested version/flags were inadequate
> */
> int (*load_drv)(unsigned int version,
> unsigned int flags);
>
> /**
> * unload_drv:
> *
> * Called to release any resources prior to the plugin
> * being unloaded from memory. Returns -1 to prevent
> * plugin unloading.
> */
> int (*load_drv)(void);
s/load_drv/unload_drv/ or this won't compile. Are these two callbacks
mandatory, or can they be NULL in the case that the driver only supports
exactly what it recorded in version/flags?
> /**
> * virLockManagerPluginLoad:
> * @name: the name of the plugin
> *
> * Attempt to load the plugin $(libdir)/libvirt/lock-manager/@name.so
> * The plugin driver entry point will be resolved& invoked to obtain
> * the lock manager driver
Returns NULL on failure, but is there any way to distinguish between
levels of failure (file not found vs. plugin_init failed vs. load_drv
callback failed), since that might be useful in diagnosing the problem?
> */
> virLockManagerPluginPtr virLockManagerPluginLoad(const char *name);
No documentation for virLockMAnagerPluginUnload?
> int virLockManagerPluginUnload(virLockManagerPluginPtr);
>
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list