mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
xen: reject unknown flags
Also fix a logic bug in xenXMDomain{Attach,Detach}DeviceFlags, where (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT) is always false. * src/xen/xen_driver.c (xenUnifiedDomainXMLFromNative) (xenUnifiedDomainXMLToNative, xenUnifiedDomainBlockPeek): Reject unknown flags. * src/xen/xen_hypervisor.c (xenHypervisorOpen) (xenHypervisorGetDomainState): Likewise. * src/xen/xen_inotify.c (xenInotifyOpen): Likewise. * src/xen/xs_internal.c (xenStoreOpen, xenStoreDomainGetState) (xenStoreDomainReboot): Likewise. * src/xen/xend_internal.c (xenDaemonOpen, xenDaemonDomainReboot) (xenDaemonDomainCoreDump, xenDaemonDomainGetState) (xenDaemonDomainMigratePrepare, xenDaemonDomainSetVcpusFlags, xenDaemonDomainGetVcpusFlags, xenDaemonAttachDeviceFlags, xenDaemonDetachDeviceFlags): Likewise. (xenDaemonDomainGetXMLDesc): Prefer unsigned flags. * src/xen/xend_internal.h (xenDaemonDomainGetXMLDesc): Likewise. * src/xen/xm_internal.h (xenXMDomainGetXMLDesc): Likewise. * src/xen/xm_internal.c (xenXMDomainGetXMLDesc): Likewise. (xenXMOpen, xenXMDomainGetState, xenXMDomainSetVcpusFlags) (xenXMDomainGetVcpusFlags): Reject unknown flags. (xenXMDomainAttachDeviceFlags, xenXMDomainDetachDeviceFlags): Likewise, and avoid always-false conditional. * src/xen/xen_driver.h (XEN_MIGRATION_FLAGS): New define.
This commit is contained in:
parent
ca122578b3
commit
6a713b310a
@ -1261,7 +1261,7 @@ static char *
|
|||||||
xenUnifiedDomainXMLFromNative(virConnectPtr conn,
|
xenUnifiedDomainXMLFromNative(virConnectPtr conn,
|
||||||
const char *format,
|
const char *format,
|
||||||
const char *config,
|
const char *config,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virDomainDefPtr def = NULL;
|
virDomainDefPtr def = NULL;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
@ -1271,6 +1271,8 @@ xenUnifiedDomainXMLFromNative(virConnectPtr conn,
|
|||||||
int vncport;
|
int vncport;
|
||||||
GET_PRIVATE(conn);
|
GET_PRIVATE(conn);
|
||||||
|
|
||||||
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
|
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
|
||||||
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
|
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
|
||||||
xenUnifiedError(VIR_ERR_INVALID_ARG,
|
xenUnifiedError(VIR_ERR_INVALID_ARG,
|
||||||
@ -1311,13 +1313,15 @@ static char *
|
|||||||
xenUnifiedDomainXMLToNative(virConnectPtr conn,
|
xenUnifiedDomainXMLToNative(virConnectPtr conn,
|
||||||
const char *format,
|
const char *format,
|
||||||
const char *xmlData,
|
const char *xmlData,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virDomainDefPtr def = NULL;
|
virDomainDefPtr def = NULL;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
virConfPtr conf = NULL;
|
virConfPtr conf = NULL;
|
||||||
GET_PRIVATE(conn);
|
GET_PRIVATE(conn);
|
||||||
|
|
||||||
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
|
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
|
||||||
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
|
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
|
||||||
xenUnifiedError(VIR_ERR_INVALID_ARG,
|
xenUnifiedError(VIR_ERR_INVALID_ARG,
|
||||||
@ -1368,6 +1372,8 @@ xenUnifiedDomainMigratePrepare (virConnectPtr dconn,
|
|||||||
{
|
{
|
||||||
GET_PRIVATE(dconn);
|
GET_PRIVATE(dconn);
|
||||||
|
|
||||||
|
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
|
||||||
|
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
|
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
|
||||||
return xenDaemonDomainMigratePrepare (dconn, cookie, cookielen,
|
return xenDaemonDomainMigratePrepare (dconn, cookie, cookielen,
|
||||||
uri_in, uri_out,
|
uri_in, uri_out,
|
||||||
@ -1388,6 +1394,8 @@ xenUnifiedDomainMigratePerform (virDomainPtr dom,
|
|||||||
{
|
{
|
||||||
GET_PRIVATE(dom->conn);
|
GET_PRIVATE(dom->conn);
|
||||||
|
|
||||||
|
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
|
||||||
|
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
|
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
|
||||||
return xenDaemonDomainMigratePerform (dom, cookie, cookielen, uri,
|
return xenDaemonDomainMigratePerform (dom, cookie, cookielen, uri,
|
||||||
flags, dname, resource);
|
flags, dname, resource);
|
||||||
@ -1408,6 +1416,8 @@ xenUnifiedDomainMigrateFinish (virConnectPtr dconn,
|
|||||||
char *domain_xml = NULL;
|
char *domain_xml = NULL;
|
||||||
virDomainPtr dom_new = NULL;
|
virDomainPtr dom_new = NULL;
|
||||||
|
|
||||||
|
virCheckFlags(XEN_MIGRATION_FLAGS, NULL);
|
||||||
|
|
||||||
dom = xenUnifiedDomainLookupByName (dconn, dname);
|
dom = xenUnifiedDomainLookupByName (dconn, dname);
|
||||||
if (! dom) {
|
if (! dom) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1765,11 +1775,13 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path,
|
|||||||
static int
|
static int
|
||||||
xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path,
|
xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path,
|
||||||
unsigned long long offset, size_t size,
|
unsigned long long offset, size_t size,
|
||||||
void *buffer, unsigned int flags ATTRIBUTE_UNUSED)
|
void *buffer, unsigned int flags)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
GET_PRIVATE (dom->conn);
|
GET_PRIVATE (dom->conn);
|
||||||
|
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
|
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
|
||||||
r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer);
|
r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer);
|
||||||
if (r != -2) return r;
|
if (r != -2) return r;
|
||||||
|
@ -63,6 +63,13 @@ extern int xenRegister (void);
|
|||||||
# define XEN_SCHED_SEDF_NPARAM 6
|
# define XEN_SCHED_SEDF_NPARAM 6
|
||||||
# define XEN_SCHED_CRED_NPARAM 2
|
# define XEN_SCHED_CRED_NPARAM 2
|
||||||
|
|
||||||
|
/* The set of migration flags explicitly supported by xen. */
|
||||||
|
# define XEN_MIGRATION_FLAGS \
|
||||||
|
(VIR_MIGRATE_LIVE | \
|
||||||
|
VIR_MIGRATE_UNDEFINE_SOURCE | \
|
||||||
|
VIR_MIGRATE_PAUSED | \
|
||||||
|
VIR_MIGRATE_PERSIST_DEST)
|
||||||
|
|
||||||
/* _xenUnifiedDriver:
|
/* _xenUnifiedDriver:
|
||||||
*
|
*
|
||||||
* Entry points into the underlying Xen drivers. This structure
|
* Entry points into the underlying Xen drivers. This structure
|
||||||
|
@ -2201,11 +2201,13 @@ xenHypervisorInit(void)
|
|||||||
virDrvOpenStatus
|
virDrvOpenStatus
|
||||||
xenHypervisorOpen(virConnectPtr conn,
|
xenHypervisorOpen(virConnectPtr conn,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
if (initialized == 0)
|
if (initialized == 0)
|
||||||
if (xenHypervisorInit() == -1)
|
if (xenHypervisorInit() == -1)
|
||||||
return -1;
|
return -1;
|
||||||
@ -3272,11 +3274,13 @@ int
|
|||||||
xenHypervisorGetDomainState(virDomainPtr domain,
|
xenHypervisorGetDomainState(virDomainPtr domain,
|
||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||||
virDomainInfo info;
|
virDomainInfo info;
|
||||||
|
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (domain->conn == NULL)
|
if (domain->conn == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -383,13 +383,15 @@ cleanup:
|
|||||||
virDrvOpenStatus
|
virDrvOpenStatus
|
||||||
xenInotifyOpen(virConnectPtr conn,
|
xenInotifyOpen(virConnectPtr conn,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
DIR *dh;
|
DIR *dh;
|
||||||
struct dirent *ent;
|
struct dirent *ent;
|
||||||
char *path;
|
char *path;
|
||||||
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
if (priv->configDir) {
|
if (priv->configDir) {
|
||||||
priv->useXenConfigCache = 1;
|
priv->useXenConfigCache = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1323,11 +1323,13 @@ error:
|
|||||||
virDrvOpenStatus
|
virDrvOpenStatus
|
||||||
xenDaemonOpen(virConnectPtr conn,
|
xenDaemonOpen(virConnectPtr conn,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
char *port = NULL;
|
char *port = NULL;
|
||||||
int ret = VIR_DRV_OPEN_ERROR;
|
int ret = VIR_DRV_OPEN_ERROR;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
/* Switch on the scheme, which we expect to be NULL (file),
|
/* Switch on the scheme, which we expect to be NULL (file),
|
||||||
* "http" or "xen".
|
* "http" or "xen".
|
||||||
*/
|
*/
|
||||||
@ -1488,8 +1490,10 @@ xenDaemonDomainShutdown(virDomainPtr domain)
|
|||||||
* Returns 0 in case of success, -1 (with errno) in case of error.
|
* Returns 0 in case of success, -1 (with errno) in case of error.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
|
xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags)
|
||||||
{
|
{
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return(-1);
|
return(-1);
|
||||||
@ -1629,8 +1633,10 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename)
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
|
xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) ||
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) ||
|
||||||
(filename == NULL)) {
|
(filename == NULL)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
@ -1837,12 +1843,15 @@ cleanup:
|
|||||||
* the caller must free() the returned value.
|
* the caller must free() the returned value.
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus)
|
xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
|
||||||
|
const char *cpus)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
virDomainDefPtr def;
|
virDomainDefPtr def;
|
||||||
char *xml;
|
char *xml;
|
||||||
|
|
||||||
|
/* Flags checked by virDomainDefFormat */
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -1921,11 +1930,13 @@ int
|
|||||||
xenDaemonDomainGetState(virDomainPtr domain,
|
xenDaemonDomainGetState(virDomainPtr domain,
|
||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||||
struct sexpr *root;
|
struct sexpr *root;
|
||||||
|
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (domain->id < 0 && priv->xendConfigVersion < 3)
|
if (domain->id < 0 && priv->xendConfigVersion < 3)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -2213,6 +2224,10 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
|||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
int max;
|
int max;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||||
|
VIR_DOMAIN_VCPU_CONFIG |
|
||||||
|
VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|
||||||
|| (vcpus < 1)) {
|
|| (vcpus < 1)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
@ -2364,6 +2379,10 @@ xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
|||||||
int ret;
|
int ret;
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||||
|
VIR_DOMAIN_VCPU_CONFIG |
|
||||||
|
VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||||
|
|
||||||
if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
|
if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
@ -2660,6 +2679,8 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
char class[8], ref[80];
|
char class[8], ref[80];
|
||||||
char *target = NULL;
|
char *target = NULL;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
@ -2825,8 +2846,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
char class[8], ref[80];
|
char class[8], ref[80];
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_CURRENT |
|
virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE |
|
||||||
VIR_DOMAIN_DEVICE_MODIFY_LIVE |
|
|
||||||
VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
|
VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
@ -2940,6 +2960,8 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
char *xendev = NULL;
|
char *xendev = NULL;
|
||||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -3149,10 +3171,12 @@ xenDaemonDomainMigratePrepare (virConnectPtr dconn,
|
|||||||
int *cookielen ATTRIBUTE_UNUSED,
|
int *cookielen ATTRIBUTE_UNUSED,
|
||||||
const char *uri_in,
|
const char *uri_in,
|
||||||
char **uri_out,
|
char **uri_out,
|
||||||
unsigned long flags ATTRIBUTE_UNUSED,
|
unsigned long flags,
|
||||||
const char *dname ATTRIBUTE_UNUSED,
|
const char *dname ATTRIBUTE_UNUSED,
|
||||||
unsigned long resource ATTRIBUTE_UNUSED)
|
unsigned long resource ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
|
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
|
||||||
|
|
||||||
/* If uri_in is NULL, get the current hostname as a best guess
|
/* If uri_in is NULL, get the current hostname as a best guess
|
||||||
* of how the source host should connect to us. Note that caller
|
* of how the source host should connect to us. Note that caller
|
||||||
* deallocates this string.
|
* deallocates this string.
|
||||||
@ -3187,6 +3211,8 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
|
|||||||
|
|
||||||
int undefined_source = 0;
|
int undefined_source = 0;
|
||||||
|
|
||||||
|
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
|
||||||
|
|
||||||
/* Xen doesn't support renaming domains during migration. */
|
/* Xen doesn't support renaming domains during migration. */
|
||||||
if (dname) {
|
if (dname) {
|
||||||
virXendError(VIR_ERR_NO_SUPPORT,
|
virXendError(VIR_ERR_NO_SUPPORT,
|
||||||
|
@ -115,7 +115,8 @@ int xenDaemonDomainGetState(virDomainPtr domain,
|
|||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus);
|
char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
|
||||||
|
const char *cpus);
|
||||||
unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
|
unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
|
||||||
char **xenDaemonListDomainsOld(virConnectPtr xend);
|
char **xenDaemonListDomainsOld(virConnectPtr xend);
|
||||||
|
|
||||||
|
@ -442,10 +442,12 @@ int xenXMConfigCacheRefresh (virConnectPtr conn) {
|
|||||||
virDrvOpenStatus
|
virDrvOpenStatus
|
||||||
xenXMOpen (virConnectPtr conn,
|
xenXMOpen (virConnectPtr conn,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = conn->privateData;
|
xenUnifiedPrivatePtr priv = conn->privateData;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
priv->configDir = XM_CONFIG_DIR;
|
priv->configDir = XM_CONFIG_DIR;
|
||||||
|
|
||||||
priv->configCache = virHashCreate(50, xenXMConfigFree);
|
priv->configCache = virHashCreate(50, xenXMConfigFree);
|
||||||
@ -485,8 +487,10 @@ int
|
|||||||
xenXMDomainGetState(virDomainPtr domain,
|
xenXMDomainGetState(virDomainPtr domain,
|
||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (domain->id != -1)
|
if (domain->id != -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -543,12 +547,15 @@ error:
|
|||||||
* Turn a config record into a lump of XML describing the
|
* Turn a config record into a lump of XML describing the
|
||||||
* domain, suitable for later feeding for virDomainCreateXML
|
* domain, suitable for later feeding for virDomainCreateXML
|
||||||
*/
|
*/
|
||||||
char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags) {
|
char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
|
||||||
|
{
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
const char *filename;
|
const char *filename;
|
||||||
xenXMConfCachePtr entry;
|
xenXMConfCachePtr entry;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
|
/* Flags checked by virDomainDefFormat */
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -714,6 +721,10 @@ xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
int max;
|
int max;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||||
|
VIR_DOMAIN_VCPU_CONFIG |
|
||||||
|
VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
@ -794,6 +805,10 @@ xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
|||||||
xenXMConfCachePtr entry;
|
xenXMConfCachePtr entry;
|
||||||
int ret = -2;
|
int ret = -2;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||||
|
VIR_DOMAIN_VCPU_CONFIG |
|
||||||
|
VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||||
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
@ -1378,7 +1393,8 @@ cleanup:
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
|
xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
|
||||||
unsigned int flags) {
|
unsigned int flags)
|
||||||
|
{
|
||||||
const char *filename = NULL;
|
const char *filename = NULL;
|
||||||
xenXMConfCachePtr entry = NULL;
|
xenXMConfCachePtr entry = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -1386,6 +1402,8 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
virDomainDefPtr def;
|
virDomainDefPtr def;
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||||
|
|
||||||
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
|
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
|
||||||
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
@ -1395,7 +1413,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
|
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
|
||||||
(domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) {
|
(domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
|
||||||
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
|
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
_("Xm driver only supports modifying persistent config"));
|
_("Xm driver only supports modifying persistent config"));
|
||||||
return -1;
|
return -1;
|
||||||
@ -1481,17 +1499,18 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
|
|||||||
int i;
|
int i;
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||||
|
|
||||||
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
|
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
|
||||||
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (domain->conn->flags & VIR_CONNECT_RO)
|
if (domain->conn->flags & VIR_CONNECT_RO)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
|
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
|
||||||
(domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) {
|
(domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
|
||||||
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
|
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
_("Xm driver only supports modifying persistent config"));
|
_("Xm driver only supports modifying persistent config"));
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -45,7 +45,7 @@ int xenXMDomainGetState(virDomainPtr domain,
|
|||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags);
|
char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags);
|
||||||
int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
|
int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
|
||||||
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
|
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
|
||||||
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
|
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
|
||||||
|
@ -267,10 +267,12 @@ virDomainGetVMInfo(virDomainPtr domain, const char *vm, const char *name)
|
|||||||
virDrvOpenStatus
|
virDrvOpenStatus
|
||||||
xenStoreOpen(virConnectPtr conn,
|
xenStoreOpen(virConnectPtr conn,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
if (flags & VIR_CONNECT_RO)
|
if (flags & VIR_CONNECT_RO)
|
||||||
priv->xshandle = xs_daemon_open_readonly();
|
priv->xshandle = xs_daemon_open_readonly();
|
||||||
else
|
else
|
||||||
@ -461,10 +463,12 @@ int
|
|||||||
xenStoreDomainGetState(virDomainPtr domain,
|
xenStoreDomainGetState(virDomainPtr domain,
|
||||||
int *state,
|
int *state,
|
||||||
int *reason,
|
int *reason,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
char *running;
|
char *running;
|
||||||
|
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (domain->id == -1)
|
if (domain->id == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -778,11 +782,13 @@ xenStoreDomainShutdown(virDomainPtr domain)
|
|||||||
* Returns 0 in case of success, -1 in case of error.
|
* Returns 0 in case of success, -1 in case of error.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
|
xenStoreDomainReboot(virDomainPtr domain, unsigned int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
xenUnifiedPrivatePtr priv;
|
xenUnifiedPrivatePtr priv;
|
||||||
|
|
||||||
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if ((domain == NULL) || (domain->conn == NULL)) {
|
if ((domain == NULL) || (domain->conn == NULL)) {
|
||||||
virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
return(-1);
|
return(-1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user