On Thu, Aug 24, 2006 at 05:32:19PM +0200, michel.ponceau(a)bull.net wrote:
After the new VCPU functions, we also need Virtual Block Device
management
equivalent to Xen commands:
'xm block-list', 'xm block-attach', 'xm block-detach'.
I propose to add in Libvirt the following 3 functions:
/**
* virDomainGetVbdevs:
* @domain: pointer to domain object, or NULL for Domain0
* @info: pointer to an array of virVbdevInfo structures
* @maxinfo: number of structures in info array
*
* Extract information about virtual block devices of domain, store it in
info.
*
* Returns the number of info filled in case of success, -1 in case of
failure.
*/
int virDomainGetVbdevs(virDomainPtr domain, virVbdevInfoPtr info, int
maxinfo)
/**
* virDomainCreateVbdev:
* @domain: pointer to domain object, or NULL for Domain0
* @number: virtual device number
* @mode: read-only (VIR_VBDMD_RO), or read/write (VIR_VBDMD_RW)
* @bkendID: ID of domain hosting the backend device (usually 0 for
domain0)
* @bkend: pointer to backend device path
*
* Create a virtual block device.
*
* Returns 0 in case of success, -1 in case of failure.
*/
int virDomainCreateVbdev(virDomainPtr domain, unsigned int number, int
mode,
int bkendID, char *bkend)
/**
* virDomainDestroyVbdev:
* @domain: pointer to domain object, or NULL for Domain0
* @number: virtual device number
*
* Destroy a virtual block device.
*
* Returns 0 in case of success, -1 in case of failure.
*/
int virDomainDestroyVbdev(virDomainPtr domain, unsigned int number)
Humm, my concern here is how general is that API ? bkendID is certainly
a Xen'ism, with no equivalent in other virtualization frameworks. If we
add dynamic block devices creation and destruction, it must be clear what
those operation means outside of a pure Xen context. In general devices
are not named by one number, bkendID is a xen concept, I don't see why
it should appear as is in the API.
Structure in libvirt.h:
/**
* virVbdevInfo: information structure for a Virtual Block Device in a
domain
*/
typedef struct _virVbdevInfo virVbdevInfo;
struct _virVbdevInfo {
unsigned int number; /* virtual device number */
int state;
int evtChn;
int ringRef;
int bkendID; /* ID of domain hosting the backend device
*/
char bkend[128];
};
typedef virVbdevInfo *virVbdevInfoPtr;
Way way too Xen specific, too undefined in general, as is this really
cannot show up in libvirt API. I would prefer discussing the concept of
the operation first instead of starting from a Xen standpoint and trying to
make it an API.
What are conceptually the operations you want to do ? How would you name
the objects exposed in those oeprations ?
Daniel
--
Red Hat Virtualization group
http://redhat.com/virtualization/
Daniel Veillard | virtualization library
http://libvirt.org/
veillard(a)redhat.com | libxml GNOME XML XSLT toolkit
http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine
http://rpmfind.net/