<br><font size=2 face="Arial">After the new VCPU functions, we also need Virtual Block Device management equivalent to Xen commands:</font>
<br><font size=2 face="Arial">    'xm block-list', 'xm block-attach', 'xm block-detach'.</font>
<br><font size=2 face="Arial">I propose to add in Libvirt the following 3 functions:</font>
<br><font size=2><tt>/**</tt></font>
<br><font size=2><tt> * virDomainGetVbdevs:</tt></font>
<br><font size=2><tt> * @domain: pointer to domain object, or NULL for Domain0</tt></font>
<br><font size=2><tt> * @info: pointer to an array of virVbdevInfo structures</tt></font>
<br><font size=2><tt> * @maxinfo: number of structures in info array</tt></font>
<br><font size=2><tt> * </tt></font>
<br><font size=2><tt> * Extract information about virtual block devices of domain, store it in info.</tt></font>
<br><font size=2><tt> *</tt></font>
<br><font size=2><tt> * Returns the number of info filled in case of success, -1 in case of failure.</tt></font>
<br><font size=2><tt> */</tt></font>
<br><font size=2><tt>int virDomainGetVbdevs(virDomainPtr domain, virVbdevInfoPtr info, int maxinfo)</tt></font>
<br>
<br><font size=2><tt>/**</tt></font>
<br><font size=2><tt> * virDomainCreateVbdev:</tt></font>
<br><font size=2><tt> * @domain: pointer to domain object, or NULL for Domain0</tt></font>
<br><font size=2><tt> * @number: virtual device number</tt></font>
<br><font size=2><tt> * @mode: read-only (VIR_VBDMD_RO), or read/write (VIR_VBDMD_RW)</tt></font>
<br><font size=2><tt> * @bkendID: ID of domain hosting the backend device (usually 0 for domain0)</tt></font>
<br><font size=2><tt> * @bkend: pointer to backend device path</tt></font>
<br><font size=2><tt> * </tt></font>
<br><font size=2><tt> * Create a virtual block device.</tt></font>
<br><font size=2><tt> *</tt></font>
<br><font size=2><tt> * Returns 0 in case of success, -1 in case of failure.</tt></font>
<br><font size=2><tt> */</tt></font>
<br><font size=2><tt>int virDomainCreateVbdev(virDomainPtr domain, unsigned int number, int mode,</tt></font>
<br><font size=2><tt>                     int bkendID, char *bkend)</tt></font>
<br>
<br><font size=2><tt>/**</tt></font>
<br><font size=2><tt> * virDomainDestroyVbdev:</tt></font>
<br><font size=2><tt> * @domain: pointer to domain object, or NULL for Domain0</tt></font>
<br><font size=2><tt> * @number: virtual device number</tt></font>
<br><font size=2><tt> * </tt></font>
<br><font size=2><tt> * Destroy a virtual block device.</tt></font>
<br><font size=2><tt> *</tt></font>
<br><font size=2><tt> * Returns 0 in case of success, -1 in case of failure.</tt></font>
<br><font size=2><tt> */</tt></font>
<br><font size=2><tt>int virDomainDestroyVbdev(virDomainPtr domain, unsigned int number)</tt></font>
<br>
<br><font size=2 face="Arial">Structure in libvirt.h:</font>
<br><font size=2><tt>/**</tt></font>
<br><font size=2><tt> * virVbdevInfo: information structure for a Virtual Block Device in a domain</tt></font>
<br><font size=2><tt> */</tt></font>
<br><font size=2><tt>typedef struct _virVbdevInfo virVbdevInfo;</tt></font>
<br><font size=2><tt>struct _virVbdevInfo {</tt></font>
<br><font size=2><tt>    unsigned int number;        /* virtual device number */</tt></font>
<br><font size=2><tt>    int state;</tt></font>
<br><font size=2><tt>    int evtChn;</tt></font>
<br><font size=2><tt>    int ringRef;</tt></font>
<br><font size=2><tt>    int bkendID;                /* ID of domain hosting the backend device */</tt></font>
<br><font size=2><tt>    char bkend[128];</tt></font>
<br><font size=2><tt>};</tt></font>
<br><font size=2><tt>typedef virVbdevInfo *virVbdevInfoPtr;</tt></font>
<br>
<br><font size=2><tt>/* Virtual Block Device access modes: read-only or read/write */</tt></font>
<br><font size=2><tt>#define VIR_VBDMD_RO        0</tt></font>
<br><font size=2><tt>#define VIR_VBDMD_RW        1</tt></font>