<br><font size=2 face="Courier New">I previously made a proposal for block devices. It was rejected because it was VBD-specific and Xen-specific. Here is a proposal for transparent interface with Xen or other. The virtual device attributes (VDA) are transferred from/to application without considering their meaning, except backend domain, previously requested to be the name for user, while it is the ID for Xen.</font>
<br>
<br><font size=2 face="Courier New">typedef struct virVDA { /* virtual device attribute */</font>
<br><font size=2 face="Courier New">    char name[16];</font>
<br><font size=2 face="Courier New">    char value[64];</font>
<br><font size=2 face="Courier New">} virVDA;</font>
<br>
<br><font size=2 face="Courier New">int virDomainGetVdevs(virDomainPtr domain, char *type, virVDA *attr, int maxattr);</font>
<br><font size=2 face="Courier New"> * @type: pointer to device type, "disk", "network" ...</font>
<br><font size=2 face="Courier New"> * @attr: pointer to an array of virVDA structures</font>
<br><font size=2 face="Courier New"> * @maxattr: number of structures in attr array</font>
<br><font size=2 face="Courier New"> * Return: (number of VDAs per device)<<16 + (number of devices), if success;</font>
<br><font size=2 face="Courier New"> *    -1 if failure.</font>
<br><font size=2 face="Courier New">For "disk" type, Xen provides the following VDA names:</font>
<br><font size=2 face="Courier New">    "virtual-device"  (virtual device number)</font>
<br><font size=2 face="Courier New">    "backend-id"      (backend domain ID)</font>
<br><font size=2 face="Courier New">    "state"</font>
<br><font size=2 face="Courier New">    "backend"         (backend device or file)</font>
<br><font size=2 face="Courier New">    "ring-ref"</font>
<br><font size=2 face="Courier New">    "event-channel"</font>
<br><font size=2 face="Courier New">This function changes "backend-id" to "bkdom-name" and translates value ID into name.</font>
<br>
<br><font size=2 face="Courier New">int virDomainCreateVdev(virDomainPtr domain, char *type, virVDA *attr, int nbattr);</font>
<br><font size=2 face="Courier New"> * @type: pointer to device type, "disk", "network" ...</font>
<br><font size=2 face="Courier New"> * @attr: pointer to an array of virVDA structures</font>
<br><font size=2 face="Courier New"> * @nbattr: number of structures in attr array</font>
<br><font size=2 face="Courier New">For "disk" type, Xen requires the following VDA names:</font>
<br><font size=2 face="Courier New">    "uname"    (backend device, value either "phy:<>" or "file:<>"</font>
<br><font size=2 face="Courier New">    "dev"      (virtual device number)</font>
<br><font size=2 face="Courier New">    "mode"     (value "ro" for read-only, or "rw" for read/write)</font>
<br><font size=2 face="Courier New">    "backend"  (backend domain ID)</font>
<br><font size=2 face="Courier New">This function translates "backend" user value (name) into ID.</font>
<br>
<br><font size=2 face="Courier New">int virDomainDestroyVdev(virDomainPtr domain, char *type, char *ref);</font>
<br><font size=2 face="Courier New"> * @type: pointer to device type, "disk", "network" ...</font>
<br><font size=2 face="Courier New"> * @ref: pointer to virtual device reference (number for Xen...)</font>