int virDomainUpdateDeviceFlags(virDomainPtr domain,
const char *xml, unsigned int flags);
+int virDomainDetachDeviceAlias(virDomainPtr domain,
+ const char *alias, unsigned int flags);
+
typedef struct _virDomainStatsRecord virDomainStatsRecord;
typedef virDomainStatsRecord *virDomainStatsRecordPtr;
struct _virDomainStatsRecord {
const char *xml,
unsigned int flags);
+typedef int
+(*virDrvDomainDetachDeviceAlias)(virDomainPtr domain,
+ const char *alias,
+ unsigned int flags);
+
typedef int
(*virDrvDomainGetAutostart)(virDomainPtr domain,
int *autostart);
virDrvDomainDetachDevice domainDetachDevice;
virDrvDomainDetachDeviceFlags domainDetachDeviceFlags;
virDrvDomainUpdateDeviceFlags domainUpdateDeviceFlags;
+ virDrvDomainDetachDeviceAlias domainDetachDeviceAlias;
virDrvDomainGetAutostart domainGetAutostart;
virDrvDomainSetAutostart domainSetAutostart;
virDrvDomainGetSchedulerType domainGetSchedulerType;
}
+/**
+ * virDomainDetachDeviceAlias:
+ * @domain: pointer to a domain object
+ * @alias: device alias
+ * @flags: bitwise-OR of virDomainDeviceModifyFlags
+ *
+ * Detach a virtual device from a domain, using the alias to
+ * specify the device. The value of @flags should be either
+ * VIR_DOMAIN_AFFECT_CURRENT, or a bitwise-or of values from
+ * VIR_DOMAIN_AFFECT_LIVE and VIR_DOMAIN_AFFECT_CURRENT, although
+ * hypervisors vary in which flags are supported.
+ *
+ * In contrast to virDomainDetachDeviceFlags() this API is
+ * asynchronous - it returns immediately after sending the detach
+ * request to the hypervisor. It's caller's responsibility to
+ * wait for VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event to signal
+ * actual device removal.
+ *
+ * Returns 0 in case of success, -1 in case of failure.
+ */
+int
+virDomainDetachDeviceAlias(virDomainPtr domain,
+ const char *alias,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+
+ VIR_DOMAIN_DEBUG(domain, "alias=%s, flags=0x%x", alias, flags);
+
+ virResetLastError();
+
+ virCheckDomainReturn(domain, -1);
+ conn = domain->conn;
+
+ virCheckNonNullArgGoto(alias, error);
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->driver->domainDetachDeviceAlias) {
+ int ret;
+ ret = conn->driver->domainDetachDeviceAlias(domain, alias, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(domain->conn);
+ return -1;
+}
+
+
/**
* virConnectDomainEventRegister:
* @conn: pointer to the connection