static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
[XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
[XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
- [XEN_UNIFIED_XM_OFFSET] = &xenXMDriver,
};
static bool is_privileged = false;
xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
{
xenUnifiedPrivatePtr priv = dom->conn->privateData;
- int i;
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
/*
* config without touching persistent config, we add the extra flag here
* to make this API work
*/
- if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
- priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
- drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
- return 0;
+ if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+ return xenXMDomainAttachDeviceFlags(dom, xml, flags);
+ else
+ return xenDaemonAttachDeviceFlags(dom, xml, flags);
return -1;
}
unsigned int flags)
{
xenUnifiedPrivatePtr priv = dom->conn->privateData;
- int i;
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
- drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
- return 0;
-
- return -1;
+ if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+ return xenXMDomainAttachDeviceFlags(dom, xml, flags);
+ else
+ return xenDaemonAttachDeviceFlags(dom, xml, flags);
}
static int
xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
{
xenUnifiedPrivatePtr priv = dom->conn->privateData;
- int i;
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
/*
* config without touching persistent config, we add the extra flag here
* to make this API work
*/
- if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
- priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
- drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
- return 0;
-
- return -1;
+ if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+ return xenXMDomainDetachDeviceFlags(dom, xml, flags);
+ else
+ return xenDaemonDetachDeviceFlags(dom, xml, flags);
}
static int
unsigned int flags)
{
xenUnifiedPrivatePtr priv = dom->conn->privateData;
- int i;
-
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
- drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
- return 0;
- return -1;
+ if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+ return xenXMDomainDetachDeviceFlags(dom, xml, flags);
+ else
+ return xenDaemonDetachDeviceFlags(dom, xml, flags);
}
static int
xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
unsigned int flags)
{
- xenUnifiedPrivatePtr priv = dom->conn->privateData;
-
- if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
- return xenDaemonUpdateDeviceFlags(dom, xml, flags);
- return -1;
+ return xenDaemonUpdateDeviceFlags(dom, xml, flags);
}
static int
* structure with direct calls in xen_unified.c.
*/
struct xenUnifiedDriver {
- virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;
- virDrvDomainDetachDeviceFlags xenDomainDetachDeviceFlags;
virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
*
* Returns 0 in case of success, -1 in case of failure.
*/
-static int
+int
xenDaemonAttachDeviceFlags(virDomainPtr domain,
const char *xml,
unsigned int flags)
_("Cannot modify live config if domain is inactive"));
return -1;
}
- /* If xendConfigVersion < 3 only live config can be changed */
- if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
- virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("Xend version does not support modifying "
- "persistent config"));
- return -1;
- }
} else {
/* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
_("Cannot modify live config if domain is inactive"));
return -1;
}
- /* If xendConfigVersion < 3 only live config can be changed */
- if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
- virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("Xend version does not support modifying "
- "persistent config"));
- return -1;
- }
} else {
/* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
*
* Returns 0 in case of success, -1 in case of failure.
*/
-static int
+int
xenDaemonDetachDeviceFlags(virDomainPtr domain,
const char *xml,
unsigned int flags)
_("Cannot modify live config if domain is inactive"));
return -1;
}
- /* If xendConfigVersion < 3 only live config can be changed */
- if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
- virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("Xend version does not support modifying "
- "persistent config"));
- return -1;
- }
} else {
/* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
}
struct xenUnifiedDriver xenDaemonDriver = {
- .xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,
- .xenDomainDetachDeviceFlags = xenDaemonDetachDeviceFlags,
.xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
.xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
.xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
char **const names,
int maxnames);
+int xenDaemonAttachDeviceFlags(virDomainPtr domain,
+ const char *xml,
+ unsigned int flags);
+int xenDaemonDetachDeviceFlags(virDomainPtr domain,
+ const char *xml,
+ unsigned int flags);
+
virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr);
int xenDaemonDomainCreate(virDomainPtr domain);
int xenDaemonDomainUndefine(virDomainPtr domain);
#define XEN_MAX_PHYSICAL_CPU 1024
char * xenXMAutoAssignMac(void);
-static int xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
- unsigned int flags);
-static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
- unsigned int flags);
#define XM_REFRESH_INTERVAL 10
#define QEMU_IF_SCRIPT "qemu-ifup"
#define XM_XML_ERROR "Invalid xml"
-struct xenUnifiedDriver xenXMDriver = {
- .xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
- .xenDomainDetachDeviceFlags = xenXMDomainDetachDeviceFlags,
-};
-
#ifndef WITH_XEN_INOTIFY
static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED)
{
*
* Returns 0 in case of success, -1 in case of failure.
*/
-static int
+int
xenXMDomainAttachDeviceFlags(virDomainPtr domain,
const char *xml,
unsigned int flags)
*
* Returns 0 in case of success, -1 in case of failure.
*/
-static int
+int
xenXMDomainDetachDeviceFlags(virDomainPtr domain,
const char *xml,
unsigned int flags)
# include "virconf.h"
# include "domain_conf.h"
-extern struct xenUnifiedDriver xenXMDriver;
-
int xenXMConfigCacheRefresh (virConnectPtr conn);
int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename);
int xenXMConfigCacheRemoveFile(virConnectPtr conn, const char *filename);
int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart);
int xenXMDomainSetAutostart(virDomainPtr dom, int autostart);
+int xenXMDomainAttachDeviceFlags(virDomainPtr domain,
+ const char *xml,
+ unsigned int flags);
+
+int xenXMDomainDetachDeviceFlags(virDomainPtr domain,
+ const char *xml,
+ unsigned int flags);
+
#endif