mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
Simplify the Xen domain attach/dettach driver methods
Make the domain attach/dettach driver methods directly call into either the XenD or XM drivers Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
6e66100155
commit
758aea3098
@ -84,7 +84,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
|
|||||||
static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
|
static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
|
||||||
[XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
|
[XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
|
||||||
[XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
|
[XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
|
||||||
[XEN_UNIFIED_XM_OFFSET] = &xenXMDriver,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool is_privileged = false;
|
static bool is_privileged = false;
|
||||||
@ -1408,7 +1407,6 @@ static int
|
|||||||
xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
|
xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
||||||
int i;
|
|
||||||
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
|
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1416,14 +1414,13 @@ xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
|
|||||||
* config without touching persistent config, we add the extra flag here
|
* config without touching persistent config, we add the extra flag here
|
||||||
* to make this API work
|
* to make this API work
|
||||||
*/
|
*/
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
|
if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
||||||
priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
|
||||||
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
|
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
|
||||||
|
|
||||||
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
|
return xenXMDomainAttachDeviceFlags(dom, xml, flags);
|
||||||
drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
|
else
|
||||||
return 0;
|
return xenDaemonAttachDeviceFlags(dom, xml, flags);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1433,21 +1430,17 @@ xenUnifiedDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
|
|||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
|
return xenXMDomainAttachDeviceFlags(dom, xml, flags);
|
||||||
drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
|
else
|
||||||
return 0;
|
return xenDaemonAttachDeviceFlags(dom, xml, flags);
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
|
xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
||||||
int i;
|
|
||||||
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
|
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1455,16 +1448,13 @@ xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
|
|||||||
* config without touching persistent config, we add the extra flag here
|
* config without touching persistent config, we add the extra flag here
|
||||||
* to make this API work
|
* to make this API work
|
||||||
*/
|
*/
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
|
if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
||||||
priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
|
||||||
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
|
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
|
||||||
|
|
||||||
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
|
return xenXMDomainDetachDeviceFlags(dom, xml, flags);
|
||||||
drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
|
else
|
||||||
return 0;
|
return xenDaemonDetachDeviceFlags(dom, xml, flags);
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -1472,25 +1462,18 @@ xenUnifiedDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
|
|||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
|
return xenXMDomainDetachDeviceFlags(dom, xml, flags);
|
||||||
drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
|
else
|
||||||
return 0;
|
return xenDaemonDetachDeviceFlags(dom, xml, flags);
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
|
xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = dom->conn->privateData;
|
|
||||||
|
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
|
|
||||||
return xenDaemonUpdateDeviceFlags(dom, xml, flags);
|
return xenDaemonUpdateDeviceFlags(dom, xml, flags);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -93,8 +93,6 @@ extern int xenRegister (void);
|
|||||||
* structure with direct calls in xen_unified.c.
|
* structure with direct calls in xen_unified.c.
|
||||||
*/
|
*/
|
||||||
struct xenUnifiedDriver {
|
struct xenUnifiedDriver {
|
||||||
virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;
|
|
||||||
virDrvDomainDetachDeviceFlags xenDomainDetachDeviceFlags;
|
|
||||||
virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
|
virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
|
||||||
virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
|
virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
|
||||||
virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
|
virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
|
||||||
|
@ -2195,7 +2195,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
|
|||||||
*
|
*
|
||||||
* Returns 0 in case of success, -1 in case of failure.
|
* Returns 0 in case of success, -1 in case of failure.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
xenDaemonAttachDeviceFlags(virDomainPtr domain,
|
xenDaemonAttachDeviceFlags(virDomainPtr domain,
|
||||||
const char *xml,
|
const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
@ -2218,13 +2218,6 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain,
|
|||||||
_("Cannot modify live config if domain is inactive"));
|
_("Cannot modify live config if domain is inactive"));
|
||||||
return -1;
|
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 {
|
} else {
|
||||||
/* Only live config can be changed if xendConfigVersion < 3 */
|
/* Only live config can be changed if xendConfigVersion < 3 */
|
||||||
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
||||||
@ -2378,13 +2371,6 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain,
|
|||||||
_("Cannot modify live config if domain is inactive"));
|
_("Cannot modify live config if domain is inactive"));
|
||||||
return -1;
|
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 {
|
} else {
|
||||||
/* Only live config can be changed if xendConfigVersion < 3 */
|
/* Only live config can be changed if xendConfigVersion < 3 */
|
||||||
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
||||||
@ -2463,7 +2449,7 @@ cleanup:
|
|||||||
*
|
*
|
||||||
* Returns 0 in case of success, -1 in case of failure.
|
* Returns 0 in case of success, -1 in case of failure.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
xenDaemonDetachDeviceFlags(virDomainPtr domain,
|
xenDaemonDetachDeviceFlags(virDomainPtr domain,
|
||||||
const char *xml,
|
const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
@ -2485,13 +2471,6 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain,
|
|||||||
_("Cannot modify live config if domain is inactive"));
|
_("Cannot modify live config if domain is inactive"));
|
||||||
return -1;
|
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 {
|
} else {
|
||||||
/* Only live config can be changed if xendConfigVersion < 3 */
|
/* Only live config can be changed if xendConfigVersion < 3 */
|
||||||
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
|
||||||
@ -3362,8 +3341,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct xenUnifiedDriver xenDaemonDriver = {
|
struct xenUnifiedDriver xenDaemonDriver = {
|
||||||
.xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,
|
|
||||||
.xenDomainDetachDeviceFlags = xenDaemonDetachDeviceFlags,
|
|
||||||
.xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
|
.xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
|
||||||
.xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
|
.xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
|
||||||
.xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
|
.xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
|
||||||
|
@ -114,6 +114,13 @@ int xenDaemonListDefinedDomains(virConnectPtr conn,
|
|||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
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);
|
virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr);
|
||||||
int xenDaemonDomainCreate(virDomainPtr domain);
|
int xenDaemonDomainCreate(virDomainPtr domain);
|
||||||
int xenDaemonDomainUndefine(virDomainPtr domain);
|
int xenDaemonDomainUndefine(virDomainPtr domain);
|
||||||
|
@ -66,10 +66,6 @@
|
|||||||
#define XEN_MAX_PHYSICAL_CPU 1024
|
#define XEN_MAX_PHYSICAL_CPU 1024
|
||||||
|
|
||||||
char * xenXMAutoAssignMac(void);
|
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 XM_REFRESH_INTERVAL 10
|
||||||
|
|
||||||
@ -80,11 +76,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
#define QEMU_IF_SCRIPT "qemu-ifup"
|
#define QEMU_IF_SCRIPT "qemu-ifup"
|
||||||
#define XM_XML_ERROR "Invalid xml"
|
#define XM_XML_ERROR "Invalid xml"
|
||||||
|
|
||||||
struct xenUnifiedDriver xenXMDriver = {
|
|
||||||
.xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
|
|
||||||
.xenDomainDetachDeviceFlags = xenXMDomainDetachDeviceFlags,
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef WITH_XEN_INOTIFY
|
#ifndef WITH_XEN_INOTIFY
|
||||||
static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED)
|
static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
@ -1236,7 +1227,7 @@ cleanup:
|
|||||||
*
|
*
|
||||||
* Returns 0 in case of success, -1 in case of failure.
|
* Returns 0 in case of success, -1 in case of failure.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
xenXMDomainAttachDeviceFlags(virDomainPtr domain,
|
xenXMDomainAttachDeviceFlags(virDomainPtr domain,
|
||||||
const char *xml,
|
const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
@ -1326,7 +1317,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain,
|
|||||||
*
|
*
|
||||||
* Returns 0 in case of success, -1 in case of failure.
|
* Returns 0 in case of success, -1 in case of failure.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
xenXMDomainDetachDeviceFlags(virDomainPtr domain,
|
xenXMDomainDetachDeviceFlags(virDomainPtr domain,
|
||||||
const char *xml,
|
const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
|
@ -30,8 +30,6 @@
|
|||||||
# include "virconf.h"
|
# include "virconf.h"
|
||||||
# include "domain_conf.h"
|
# include "domain_conf.h"
|
||||||
|
|
||||||
extern struct xenUnifiedDriver xenXMDriver;
|
|
||||||
|
|
||||||
int xenXMConfigCacheRefresh (virConnectPtr conn);
|
int xenXMConfigCacheRefresh (virConnectPtr conn);
|
||||||
int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename);
|
int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename);
|
||||||
int xenXMConfigCacheRemoveFile(virConnectPtr conn, const char *filename);
|
int xenXMConfigCacheRemoveFile(virConnectPtr conn, const char *filename);
|
||||||
@ -69,4 +67,12 @@ int xenXMDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long
|
|||||||
int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart);
|
int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart);
|
||||||
int xenXMDomainSetAutostart(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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user