On Fri, Sep 10, 2010 at 02:01:16PM -0600, Eric Blake wrote:
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/(a)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?
We'll report errors via the normal libvirt error & logging APIs
so that should still be diagnosable.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://deltacloud.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|