[libvirt] [PATCH]: Update ruby-libvirt migrate binding to use rb_scan_args
by Chris Lalancette
It's really not a good idea to hand parse variable number of args to a ruby
binding, like I implemented for the "migrate" method. Convert this to use
rb_scan_args, which is the proper way to do it, and matches all of the other
variable argument implementations in the binding.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
16 years, 1 month
[libvirt] [PATCH] * tests/cpuset: New script. Test for today's fix.
by Jim Meyering
>From c0beb0ed6dd3d392b11161c565d7dfd52ed2aceb Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Mon, 2 Jun 2008 11:54:34 +0200
Subject: [PATCH 1/2] * tests/cpuset: New script. Test for today's fix.
* tests/Makefile.am (test_scripts): Add cpuset.
---
tests/Makefile.am | 1 +
tests/cpuset | 45 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 0 deletions(-)
create mode 100755 tests/cpuset
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 02b7970..ea577df 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -48,6 +48,7 @@ test_scripts = domainschematest
if WITH_LIBVIRTD
test_scripts += \
test_conf.sh \
+ cpuset \
daemon-conf \
int-overflow \
read-bufsiz \
diff --git a/tests/cpuset b/tests/cpuset
new file mode 100755
index 0000000..8722c81
--- /dev/null
+++ b/tests/cpuset
@@ -0,0 +1,45 @@
+#!/bin/sh
+# ensure that defining with an invalid vCPU cpuset elicits a diagnostic
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+ set -x
+ virsh --version
+fi
+
+. $srcdir/test-lib.sh
+
+fail=0
+
+# generate input
+virsh --connect test:///default dumpxml 1 > xml || fail=1
+
+# require the presence of the string we'll transform
+grep '<vcpu>' xml > /dev/null || fail=1
+
+sed "s/vcpu>/vcpu cpuset='aaa'>/" xml > xml-invalid || fail=1
+
+# Require failure and a diagnostic.
+virsh --connect test:///default define xml-invalid > out 2>&1 && fail=1
+cat <<\EOF > exp || fail=1
+libvir: Domain Config error : failed Xen syscall topology cpuset syntax error
+error: Failed to define domain from xml-invalid
+
+EOF
+compare out exp || fail=1
+
+(exit $fail); exit $fail
--
1.6.0.3.756.gb776d
16 years, 1 month
[libvirt] PATCH: don't print uninitialized integer in diagnostic
by Jim Meyering
In adding a test of the vcpu cpuset parsing code (another patch coming
separately), I noticed a bogus diagnostic:
virsh --connect test:///default dumpxml 1 > xml
sed "s/vcpu>/vcpu cpuset='aaa'>/" xml > xml-invalid
./virsh --connect test:///default define xml-invalid 2>&1 |head -1
libvir: Domain Config error : failed Xen syscall topology cpuset syntax error -2027441560
With the patch below, I get this output instead:
(i.e., same, but without the trailing negative number)
$ ./virsh --connect test:///default define xml-invalid 2>&1 |head -1
libvir: Domain Config error : failed Xen syscall topology cpuset syntax error
diff --git a/src/virterror.c b/src/virterror.c
index 21c7339..be809a0 100644
--- a/src/virterror.c
+++ b/src/virterror.c
@@ -1,7 +1,7 @@
/*
* virterror.c: implements error handling and reporting code for libvirt
*
- * Copy: Copyright (C) 2006 Red Hat, Inc.
+ * Copy: Copyright (C) 2006, 2008 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
@@ -516,7 +516,7 @@ __virErrorMsg(virErrorNumber error, const char *info)
errmsg = _("could not connect to Xen Store %s");
break;
case VIR_ERR_XEN_CALL:
- errmsg = _("failed Xen syscall %s %d");
+ errmsg = _("failed Xen syscall %s");
break;
case VIR_ERR_OS_TYPE:
if (info == NULL)
16 years, 1 month
[libvirt] virt-viewer with fullscreen?
by Jun Koi
Hi,
I am using virt-viewer to view an Windows VM. However, I cannot get
fullscreen with virt-viewer when using menu View -> Fullscreen. When I
did that, nothing happenes. Is that a bug?
The version of virt-viewer is 0.0.3
Thanks,
J
16 years, 1 month
[libvirt] [PATCH] Add storage API support to test driver
by Cole Robinson
The attached patch implements the storage driver routines
for the test driver. Most of the code is identical to
storage_driver.c with all the references to backends
removed.
One caveat of this is that storage pools are hardcoded
to a specific size when they are defined: I figure someone
could expand this to read sizes from xml at definition
time if they wanted, but for now hardcoded values is
sufficient.
I've done some decent testing with it all, so I'm pretty
confident it isn't too broken.
Thanks,
Cole
src/test.c | 753 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 748 insertions(+), 5 deletions(-)
diff --git a/src/test.c b/src/test.c
index aab74e4..5ee51c0 100644
--- a/src/test.c
+++ b/src/test.c
@@ -29,6 +29,7 @@
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
+#include <libxml/xmlsave.h>
#include "test.h"
#include "buf.h"
@@ -38,6 +39,7 @@
#include "memory.h"
#include "network_conf.h"
#include "domain_conf.h"
+#include "storage_conf.h"
#include "xml.h"
#define MAX_CPUS 128
@@ -59,6 +61,7 @@ struct _testConn {
virNodeInfo nodeInfo;
virDomainObjList domains;
virNetworkObjList networks;
+ virStoragePoolObjList pools;
int numCells;
testCell cells[MAX_CELLS];
};
@@ -106,11 +109,56 @@ static const virNodeInfo defaultNodeInfo = {
} \
} while (0)
+#define GET_POOL(pool, ret) \
+ testConnPtr privconn; \
+ virStoragePoolObjPtr privpool; \
+ \
+ privconn = (testConnPtr)pool->conn->privateData; \
+ do { \
+ if ((privpool = virStoragePoolObjFindByName(&privconn->pools, \
+ (pool)->name)) == NULL) {\
+ testError((pool)->conn, VIR_ERR_INVALID_ARG, __FUNCTION__); \
+ return (ret); \
+ } \
+ } while (0)
+
+#define GET_POOL_FROM_VOL(vol, ret) \
+ GET_POOL(testStoragePoolLookupByName((virConnectPtr) \
+ vol->conn, \
+ vol->pool), ret)
+
+#define GET_VOL(vol, pool, ret) \
+ virStorageVolDefPtr privvol; \
+ \
+ privvol = virStorageVolDefFindByName(pool, vol->name); \
+ do { \
+ if (!privvol) { \
+ testError(vol->conn, VIR_ERR_INVALID_STORAGE_VOL, \
+ _("no storage vol with matching name '%s'"), \
+ vol->name); \
+ return (ret); \
+ } \
+ } while (0) \
+
+
#define GET_CONNECTION(conn) \
testConnPtr privconn; \
\
privconn = (testConnPtr)conn->privateData;
+#define POOL_IS_ACTIVE(pool, ret) \
+ if (!virStoragePoolObjIsActive(pool)) { \
+ testError(obj->conn, VIR_ERR_INTERNAL_ERROR, \
+ _("storage pool '%s' is not active"), pool->def->name); \
+ return (ret); \
+ } \
+
+#define POOL_IS_NOT_ACTIVE(pool, ret) \
+ if (virStoragePoolObjIsActive(pool)) { \
+ testError(obj->conn, VIR_ERR_INTERNAL_ERROR, \
+ _("storage pool '%s' is already active"), pool->def->name); \
+ return (ret); \
+ } \
#define testError(conn, code, fmt...) \
__virReportErrorHelper(conn, VIR_FROM_TEST, code, __FILE__, \
@@ -196,6 +244,18 @@ static const char *defaultNetworkXML =
" </ip>"
"</network>";
+static const char *defaultPoolXML =
+"<pool type='dir'>"
+" <name>default-pool</name>"
+" <target>"
+" <path>/default-pool</path>"
+" </target>"
+"</pool>";
+
+static const unsigned long long defaultPoolCap = (100 * 1024 * 1024 * 1024ul);
+static const unsigned long long defaultPoolAlloc = 0;
+
+static int testStoragePoolObjSetDefaults(virStoragePoolObjPtr pool);
static int testOpenDefault(virConnectPtr conn) {
int u;
@@ -205,6 +265,8 @@ static int testOpenDefault(virConnectPtr conn) {
virDomainObjPtr domobj = NULL;
virNetworkDefPtr netdef = NULL;
virNetworkObjPtr netobj = NULL;
+ virStoragePoolDefPtr pooldef = NULL;
+ virStoragePoolObjPtr poolobj = NULL;
if (VIR_ALLOC(privconn) < 0) {
testError(conn, VIR_ERR_NO_MEMORY, "testConn");
@@ -250,15 +312,27 @@ static int testOpenDefault(virConnectPtr conn) {
virNetworkDefFree(netdef);
goto error;
}
-
netobj->active = 1;
netobj->persistent = 1;
+ if (!(pooldef = virStoragePoolDefParse(conn, defaultPoolXML, NULL)))
+ goto error;
+
+ if (!(poolobj = virStoragePoolObjAssignDef(conn, &privconn->pools,
+ pooldef))) {
+ virStoragePoolDefFree(pooldef);
+ goto error;
+ }
+ if (testStoragePoolObjSetDefaults(poolobj) == -1)
+ goto error;
+ poolobj->active = 1;
+
return VIR_DRV_OPEN_SUCCESS;
error:
virDomainObjListFree(&privconn->domains);
virNetworkObjListFree(&privconn->networks);
+ virStoragePoolObjListFree(&privconn->pools);
virCapabilitiesFree(privconn->caps);
VIR_FREE(privconn);
return VIR_DRV_OPEN_ERROR;
@@ -295,7 +369,7 @@ static int testOpenFromFile(virConnectPtr conn,
char *str;
xmlDocPtr xml = NULL;
xmlNodePtr root = NULL;
- xmlNodePtr *domains = NULL, *networks = NULL;
+ xmlNodePtr *domains = NULL, *networks = NULL, *pools = NULL;
xmlXPathContextPtr ctxt = NULL;
virNodeInfoPtr nodeInfo;
virNetworkObjPtr net;
@@ -311,7 +385,9 @@ static int testOpenFromFile(virConnectPtr conn,
goto error;
if ((fd = open(file, O_RDONLY)) < 0) {
- testError(NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("loading host definition file"));
+ testError(NULL, VIR_ERR_INTERNAL_ERROR,
+ _("loading host definition file '%s': %s"),
+ file, strerror(errno));
goto error;
}
@@ -332,7 +408,8 @@ static int testOpenFromFile(virConnectPtr conn,
ctxt = xmlXPathNewContext(xml);
if (ctxt == NULL) {
- testError(NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("creating xpath context"));
+ testError(NULL, VIR_ERR_INTERNAL_ERROR, "%s",
+ _("creating xpath context"));
goto error;
}
@@ -480,6 +557,58 @@ static int testOpenFromFile(virConnectPtr conn,
if (networks != NULL)
VIR_FREE(networks);
+ /* Parse Storage Pool list */
+ ret = virXPathNodeSet(conn, "/node/pool", ctxt, &pools);
+ if (ret < 0) {
+ testError(NULL, VIR_ERR_XML_ERROR, "%s", _("node pool list"));
+ goto error;
+ }
+ for (i = 0 ; i < ret ; i++) {
+ virStoragePoolDefPtr def;
+ virStoragePoolObjPtr pool;
+ char *relFile = virXMLPropString(pools[i], "file");
+ if (relFile != NULL) {
+ char *absFile = testBuildFilename(file, relFile);
+ VIR_FREE(relFile);
+ if (!absFile) {
+ testError(NULL, VIR_ERR_INTERNAL_ERROR, "%s",
+ _("resolving pool filename"));
+ goto error;
+ }
+
+ def = virStoragePoolDefParse(conn, NULL, absFile);
+ VIR_FREE(absFile);
+ if (!def)
+ goto error;
+ } else {
+ xmlBufferPtr buf;
+ xmlSaveCtxtPtr sctxt;
+
+ buf = xmlBufferCreate();
+ sctxt = xmlSaveToBuffer(buf, NULL, 0);
+ xmlSaveTree(sctxt, pools[i]);
+ xmlSaveClose(sctxt);
+ if ((def = virStoragePoolDefParse(conn,
+ (const char *) buf->content,
+ NULL)) == NULL) {
+ xmlBufferFree(buf);
+ goto error;
+ }
+ }
+
+ if (!(pool = virStoragePoolObjAssignDef(conn, &privconn->pools,
+ def))) {
+ virStoragePoolDefFree(def);
+ goto error;
+ }
+
+ if (testStoragePoolObjSetDefaults(pool) == -1)
+ goto error;
+ pool->active = 1;
+ }
+ if (pools != NULL)
+ VIR_FREE(pools);
+
xmlXPathFreeContext(ctxt);
xmlFreeDoc(xml);
@@ -490,10 +619,12 @@ static int testOpenFromFile(virConnectPtr conn,
xmlFreeDoc(xml);
VIR_FREE(domains);
VIR_FREE(networks);
+ VIR_FREE(pools);
if (fd != -1)
close(fd);
virDomainObjListFree(&privconn->domains);
virNetworkObjListFree(&privconn->networks);
+ virStoragePoolObjListFree(&privconn->pools);
VIR_FREE(privconn);
conn->privateData = NULL;
return VIR_DRV_OPEN_ERROR;
@@ -545,6 +676,7 @@ static int testClose(virConnectPtr conn)
virCapabilitiesFree(privconn->caps);
virDomainObjListFree(&privconn->domains);
virNetworkObjListFree(&privconn->networks);
+ virStoragePoolObjListFree(&privconn->pools);
VIR_FREE (privconn);
conn->privateData = conn;
@@ -1475,6 +1607,26 @@ static int testNetworkSetAutostart(virNetworkPtr network,
return (0);
}
+
+/*
+ * Storage Driver routines
+ */
+
+static int testStoragePoolObjSetDefaults(virStoragePoolObjPtr pool) {
+
+ pool->def->capacity = defaultPoolCap;
+ pool->def->allocation = defaultPoolAlloc;
+ pool->def->available = defaultPoolCap - defaultPoolAlloc;
+
+ pool->configFile = strdup("\0");
+ if (!pool->configFile) {
+ testError(NULL, VIR_ERR_NO_MEMORY, "configFile");
+ return -1;
+ }
+
+ return 0;
+}
+
static virDrvOpenStatus testStorageOpen(virConnectPtr conn,
xmlURIPtr uri ATTRIBUTE_UNUSED,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
@@ -1491,6 +1643,566 @@ static int testStorageClose(virConnectPtr conn) {
return 0;
}
+static virStoragePoolPtr
+testStoragePoolLookupByUUID(virConnectPtr conn,
+ const unsigned char *uuid) {
+ virStoragePoolObjPtr pool = NULL;
+ GET_CONNECTION(conn);
+
+ if ((pool = virStoragePoolObjFindByUUID(&privconn->pools, uuid)) == NULL) {
+ testError (conn, VIR_ERR_NO_STORAGE_POOL, NULL);
+ return NULL;
+ }
+
+ return virGetStoragePool(conn, pool->def->name, pool->def->uuid);
+}
+
+static virStoragePoolPtr
+testStoragePoolLookupByName(virConnectPtr conn,
+ const char *name) {
+ virStoragePoolObjPtr pool = NULL;
+ GET_CONNECTION(conn);
+
+ if ((pool = virStoragePoolObjFindByName(&privconn->pools, name)) == NULL) {
+ testError (conn, VIR_ERR_NO_STORAGE_POOL, NULL);
+ return NULL;
+ }
+
+ return virGetStoragePool(conn, pool->def->name, pool->def->uuid);
+}
+
+static virStoragePoolPtr
+testStoragePoolLookupByVolume(virStorageVolPtr vol) {
+ return testStoragePoolLookupByName(vol->conn, vol->pool);
+}
+
+static int
+testStorageNumPools(virConnectPtr conn) {
+
+ int numActive = 0, i;
+ GET_CONNECTION(conn);
+
+ for (i = 0 ; i < privconn->pools.count ; i++)
+ if (virStoragePoolObjIsActive(privconn->pools.objs[i]))
+ numActive++;
+
+ return numActive;
+}
+
+static int
+testStorageListPools(virConnectPtr conn,
+ char **const names,
+ int nnames) {
+ int n = 0, i;
+ GET_CONNECTION(conn);
+
+ memset(names, 0, sizeof(*names)*nnames);
+ for (i = 0 ; i < privconn->pools.count && n < nnames ; i++)
+ if (virStoragePoolObjIsActive(privconn->pools.objs[i]) &&
+ !(names[n++] = strdup(privconn->pools.objs[i]->def->name)))
+ goto no_memory;
+
+ return n;
+
+no_memory:
+ testError(conn, VIR_ERR_NO_MEMORY, NULL);
+ for (n = 0 ; n < nnames ; n++)
+ VIR_FREE(names[n]);
+ return (-1);
+}
+
+static int
+testStorageNumDefinedPools(virConnectPtr conn) {
+
+ int numInactive = 0, i;
+ GET_CONNECTION(conn);
+
+ for (i = 0 ; i < privconn->pools.count ; i++)
+ if (!virStoragePoolObjIsActive(privconn->pools.objs[i]))
+ numInactive++;
+
+ return numInactive;
+}
+
+static int
+testStorageListDefinedPools(virConnectPtr conn,
+ char **const names,
+ int nnames) {
+ int n = 0, i;
+ GET_CONNECTION(conn);
+
+ memset(names, 0, sizeof(*names)*nnames);
+ for (i = 0 ; i < privconn->pools.count && n < nnames ; i++)
+ if (!virStoragePoolObjIsActive(privconn->pools.objs[i]) &&
+ !(names[n++] = strdup(privconn->pools.objs[i]->def->name)))
+ goto no_memory;
+
+ return n;
+
+no_memory:
+ testError(conn, VIR_ERR_NO_MEMORY, NULL);
+ for (n = 0 ; n < nnames ; n++)
+ VIR_FREE(names[n]);
+ return (-1);
+}
+
+static int
+testStoragePoolRefresh(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED);
+
+static int
+testStoragePoolStart(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, -1);
+ POOL_IS_NOT_ACTIVE(privpool, -1);
+
+ if (testStoragePoolRefresh(obj, 0) == 0)
+ return -1;
+ privpool->active = 1;
+
+ return 0;
+}
+
+static char *
+testStorageFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
+ const char *type ATTRIBUTE_UNUSED,
+ const char *srcSpec ATTRIBUTE_UNUSED,
+ unsigned int flags ATTRIBUTE_UNUSED)
+{
+ return NULL;
+}
+
+
+static virStoragePoolPtr
+testStoragePoolCreate(virConnectPtr conn,
+ const char *xml,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ virStoragePoolDefPtr def;
+ virStoragePoolObjPtr pool;
+ GET_CONNECTION(conn);
+
+ if (!(def = virStoragePoolDefParse(conn, xml, NULL)))
+ return NULL;
+
+ if (virStoragePoolObjFindByUUID(&privconn->pools, def->uuid) ||
+ virStoragePoolObjFindByName(&privconn->pools, def->name)) {
+ testError(conn, VIR_ERR_INTERNAL_ERROR,
+ "%s", _("storage pool already exists"));
+ virStoragePoolDefFree(def);
+ return NULL;
+ }
+
+ if (!(pool = virStoragePoolObjAssignDef(conn, &privconn->pools, def))) {
+ virStoragePoolDefFree(def);
+ return NULL;
+ }
+
+ if (testStoragePoolObjSetDefaults(pool) == -1) {
+ virStoragePoolObjRemove(&privconn->pools, pool);
+ return NULL;
+ }
+ pool->active = 1;
+
+ return virGetStoragePool(conn, pool->def->name, pool->def->uuid);
+}
+
+static virStoragePoolPtr
+testStoragePoolDefine(virConnectPtr conn,
+ const char *xml,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ virStoragePoolDefPtr def;
+ virStoragePoolObjPtr pool;
+ GET_CONNECTION(conn);
+
+ if (!(def = virStoragePoolDefParse(conn, xml, NULL)))
+ return NULL;
+
+ def->capacity = defaultPoolCap;
+ def->allocation = defaultPoolAlloc;
+ def->available = defaultPoolCap - defaultPoolAlloc;
+
+ if (!(pool = virStoragePoolObjAssignDef(conn, &privconn->pools, def))) {
+ virStoragePoolDefFree(def);
+ return NULL;
+ }
+
+ if (testStoragePoolObjSetDefaults(pool) == -1) {
+ virStoragePoolObjRemove(&privconn->pools, pool);
+ return NULL;
+ }
+
+ return virGetStoragePool(conn, pool->def->name, pool->def->uuid);
+}
+
+static int
+testStoragePoolUndefine(virStoragePoolPtr obj) {
+ GET_POOL(obj, -1);
+ POOL_IS_NOT_ACTIVE(privpool, -1);
+
+ virStoragePoolObjRemove(&privconn->pools, privpool);
+
+ return 0;
+}
+
+static int
+testStoragePoolBuild(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, -1);
+ POOL_IS_NOT_ACTIVE(privpool, -1);
+
+ return 0;
+}
+
+
+static int
+testStoragePoolDestroy(virStoragePoolPtr obj) {
+ GET_POOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+
+ privpool->active = 0;
+
+ if (privpool->configFile == NULL)
+ virStoragePoolObjRemove(&privconn->pools, privpool);
+
+ return 0;
+}
+
+
+static int
+testStoragePoolDelete(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, -1);
+ POOL_IS_NOT_ACTIVE(privpool, -1);
+
+ return 0;
+}
+
+
+static int
+testStoragePoolRefresh(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+
+ return 0;
+}
+
+
+static int
+testStoragePoolGetInfo(virStoragePoolPtr obj,
+ virStoragePoolInfoPtr info) {
+ GET_POOL(obj, -1);
+
+ memset(info, 0, sizeof(virStoragePoolInfo));
+ if (privpool->active)
+ info->state = VIR_STORAGE_POOL_RUNNING;
+ else
+ info->state = VIR_STORAGE_POOL_INACTIVE;
+ info->capacity = privpool->def->capacity;
+ info->allocation = privpool->def->allocation;
+ info->available = privpool->def->available;
+
+ return 0;
+}
+
+static char *
+testStoragePoolDumpXML(virStoragePoolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, NULL);
+
+ return virStoragePoolDefFormat(obj->conn, privpool->def);
+}
+
+static int
+testStoragePoolGetAutostart(virStoragePoolPtr obj,
+ int *autostart) {
+ GET_POOL(obj, -1);
+
+ if (!privpool->configFile) {
+ *autostart = 0;
+ } else {
+ *autostart = privpool->autostart;
+ }
+
+ return 0;
+}
+
+static int
+testStoragePoolSetAutostart(virStoragePoolPtr obj,
+ int autostart) {
+ GET_POOL(obj, -1);
+
+ if (!privpool->configFile) {
+ testError(obj->conn, VIR_ERR_INVALID_ARG,
+ "%s", _("pool has no config file"));
+ return -1;
+ }
+
+ autostart = (autostart != 0);
+
+ if (privpool->autostart == autostart)
+ return 0;
+
+ privpool->autostart = autostart;
+ return 0;
+}
+
+
+static int
+testStoragePoolNumVolumes(virStoragePoolPtr obj) {
+ GET_POOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+
+ return privpool->volumes.count;
+}
+
+static int
+testStoragePoolListVolumes(virStoragePoolPtr obj,
+ char **const names,
+ int maxnames) {
+ GET_POOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+ int i = 0, n = 0;
+
+ memset(names, 0, maxnames);
+ for (i = 0 ; i < privpool->volumes.count && n < maxnames ; i++) {
+ if ((names[n++] = strdup(privpool->volumes.objs[i]->name)) == NULL) {
+ testError(obj->conn, VIR_ERR_NO_MEMORY, "%s", _("name"));
+ goto cleanup;
+ }
+ }
+
+ return n;
+
+ cleanup:
+ for (n = 0 ; n < maxnames ; n++)
+ VIR_FREE(names[i]);
+
+ memset(names, 0, maxnames);
+ return -1;
+}
+
+
+static virStorageVolPtr
+testStorageVolumeLookupByName(virStoragePoolPtr obj,
+ const char *name ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, NULL);
+ POOL_IS_ACTIVE(privpool, NULL);
+ virStorageVolDefPtr vol = virStorageVolDefFindByName(privpool, name);
+
+ if (!vol) {
+ testError(obj->conn, VIR_ERR_INVALID_STORAGE_VOL,
+ _("no storage vol with matching name '%s'"), name);
+ return NULL;
+ }
+
+ return virGetStorageVol(obj->conn, privpool->def->name,
+ vol->name, vol->key);
+}
+
+
+static virStorageVolPtr
+testStorageVolumeLookupByKey(virConnectPtr conn,
+ const char *key) {
+ GET_CONNECTION(conn);
+ unsigned int i;
+
+ for (i = 0 ; i < privconn->pools.count ; i++) {
+ if (virStoragePoolObjIsActive(privconn->pools.objs[i])) {
+ virStorageVolDefPtr vol =
+ virStorageVolDefFindByKey(privconn->pools.objs[i], key);
+
+ if (vol)
+ return virGetStorageVol(conn,
+ privconn->pools.objs[i]->def->name,
+ vol->name,
+ vol->key);
+ }
+ }
+
+ testError(conn, VIR_ERR_INVALID_STORAGE_VOL,
+ _("no storage vol with matching key '%s'"), key);
+ return NULL;
+}
+
+static virStorageVolPtr
+testStorageVolumeLookupByPath(virConnectPtr conn,
+ const char *path) {
+ GET_CONNECTION(conn);
+ unsigned int i;
+
+ for (i = 0 ; i < privconn->pools.count ; i++) {
+ if (virStoragePoolObjIsActive(privconn->pools.objs[i])) {
+ virStorageVolDefPtr vol =
+ virStorageVolDefFindByPath(privconn->pools.objs[i], path);
+
+ if (vol)
+ return virGetStorageVol(conn,
+ privconn->pools.objs[i]->def->name,
+ vol->name,
+ vol->key);
+ }
+ }
+
+ testError(conn, VIR_ERR_INVALID_STORAGE_VOL,
+ _("no storage vol with matching path '%s'"), path);
+ return NULL;
+}
+
+static virStorageVolPtr
+testStorageVolumeCreateXML(virStoragePoolPtr obj,
+ const char *xmldesc,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL(obj, NULL);
+ POOL_IS_ACTIVE(privpool, NULL);
+ virStorageVolDefPtr vol;
+
+ vol = virStorageVolDefParse(obj->conn, privpool->def, xmldesc, NULL);
+ if (vol == NULL)
+ return NULL;
+
+ if (virStorageVolDefFindByName(privpool, vol->name)) {
+ testError(obj->conn, VIR_ERR_INVALID_STORAGE_POOL,
+ "%s", _("storage vol already exists"));
+ virStorageVolDefFree(vol);
+ return NULL;
+ }
+
+ /* Make sure enough space */
+ if ((privpool->def->allocation + vol->allocation) >
+ privpool->def->capacity) {
+ testError(obj->conn, VIR_ERR_INTERNAL_ERROR,
+ _("Not enough free space in pool for volume '%s'"),
+ vol->name);
+ virStorageVolDefFree(vol);
+ return NULL;
+ }
+ privpool->def->available = (privpool->def->capacity -
+ privpool->def->allocation);
+
+ if (VIR_REALLOC_N(privpool->volumes.objs,
+ privpool->volumes.count+1) < 0) {
+ testError(obj->conn, VIR_ERR_NO_MEMORY, NULL);
+ virStorageVolDefFree(vol);
+ return NULL;
+ }
+
+ if (VIR_ALLOC_N(vol->target.path, strlen(privpool->def->target.path) +
+ 1 + strlen(vol->name) + 1) < 0) {
+ virStorageVolDefFree(vol);
+ testError(obj->conn, VIR_ERR_NO_MEMORY, "%s", _("target"));
+ return NULL;
+ }
+
+ strcpy(vol->target.path, privpool->def->target.path);
+ strcat(vol->target.path, "/");
+ strcat(vol->target.path, vol->name);
+ vol->key = strdup(vol->target.path);
+ if (vol->key == NULL) {
+ virStorageVolDefFree(vol);
+ testError(obj->conn, VIR_ERR_INTERNAL_ERROR, "%s",
+ _("storage vol key"));
+ return NULL;
+ }
+
+ privpool->def->allocation += vol->allocation;
+ privpool->def->available = (privpool->def->capacity -
+ privpool->def->allocation);
+
+ privpool->volumes.objs[privpool->volumes.count++] = vol;
+
+ return virGetStorageVol(obj->conn, privpool->def->name, vol->name,
+ vol->key);
+}
+
+static int
+testStorageVolumeDelete(virStorageVolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL_FROM_VOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+ GET_VOL(obj, privpool, -1);
+ int i;
+
+ privpool->def->allocation -= privvol->allocation;
+ privpool->def->available = (privpool->def->capacity -
+ privpool->def->allocation);
+
+ for (i = 0 ; i < privpool->volumes.count ; i++) {
+ if (privpool->volumes.objs[i] == privvol) {
+ virStorageVolDefFree(privvol);
+
+ if (i < (privpool->volumes.count - 1))
+ memmove(privpool->volumes.objs + i,
+ privpool->volumes.objs + i + 1,
+ sizeof(*(privpool->volumes.objs)) *
+ (privpool->volumes.count - (i + 1)));
+
+ if (VIR_REALLOC_N(privpool->volumes.objs,
+ privpool->volumes.count - 1) < 0) {
+ ; /* Failure to reduce memory allocation isn't fatal */
+ }
+ privpool->volumes.count--;
+
+ break;
+ }
+ }
+
+ return 0;
+}
+
+
+static int testStorageVolumeTypeForPool(int pooltype) {
+
+ switch(pooltype) {
+ case VIR_STORAGE_POOL_DIR:
+ case VIR_STORAGE_POOL_FS:
+ case VIR_STORAGE_POOL_NETFS:
+ return VIR_STORAGE_VOL_FILE;
+ default:
+ return VIR_STORAGE_VOL_BLOCK;
+ }
+}
+
+static int
+testStorageVolumeGetInfo(virStorageVolPtr obj,
+ virStorageVolInfoPtr info) {
+ GET_POOL_FROM_VOL(obj, -1);
+ POOL_IS_ACTIVE(privpool, -1);
+ GET_VOL(obj, privpool, -1);
+
+ memset(info, 0, sizeof(*info));
+ info->type = testStorageVolumeTypeForPool(privpool->def->type);
+ info->capacity = privvol->capacity;
+ info->allocation = privvol->allocation;
+
+ return 0;
+}
+
+static char *
+testStorageVolumeGetXMLDesc(virStorageVolPtr obj,
+ unsigned int flags ATTRIBUTE_UNUSED) {
+ GET_POOL_FROM_VOL(obj, NULL);
+ POOL_IS_ACTIVE(privpool, NULL);
+ GET_VOL(obj, privpool, NULL);
+
+ return virStorageVolDefFormat(obj->conn, privpool->def, privvol);
+}
+
+static char *
+testStorageVolumeGetPath(virStorageVolPtr obj) {
+ GET_POOL_FROM_VOL(obj, NULL);
+ POOL_IS_ACTIVE(privpool, NULL);
+ GET_VOL(obj, privpool, NULL);
+ char *ret;
+
+ ret = strdup(privvol->target.path);
+ if (ret == NULL) {
+ testError(obj->conn, VIR_ERR_NO_MEMORY, "%s", _("path"));
+ return NULL;
+ }
+ return ret;
+}
+
static virDriver testDriver = {
VIR_DRV_TEST,
@@ -1575,11 +2287,42 @@ static virNetworkDriver testNetworkDriver = {
testNetworkSetAutostart, /* networkSetAutostart */
};
-
static virStorageDriver testStorageDriver = {
.name = "Test",
.open = testStorageOpen,
.close = testStorageClose,
+
+ .numOfPools = testStorageNumPools,
+ .listPools = testStorageListPools,
+ .numOfDefinedPools = testStorageNumDefinedPools,
+ .listDefinedPools = testStorageListDefinedPools,
+ .findPoolSources = testStorageFindPoolSources,
+ .poolLookupByName = testStoragePoolLookupByName,
+ .poolLookupByUUID = testStoragePoolLookupByUUID,
+ .poolLookupByVolume = testStoragePoolLookupByVolume,
+ .poolCreateXML = testStoragePoolCreate,
+ .poolDefineXML = testStoragePoolDefine,
+ .poolBuild = testStoragePoolBuild,
+ .poolUndefine = testStoragePoolUndefine,
+ .poolCreate = testStoragePoolStart,
+ .poolDestroy = testStoragePoolDestroy,
+ .poolDelete = testStoragePoolDelete,
+ .poolRefresh = testStoragePoolRefresh,
+ .poolGetInfo = testStoragePoolGetInfo,
+ .poolGetXMLDesc = testStoragePoolDumpXML,
+ .poolGetAutostart = testStoragePoolGetAutostart,
+ .poolSetAutostart = testStoragePoolSetAutostart,
+ .poolNumOfVolumes = testStoragePoolNumVolumes,
+ .poolListVolumes = testStoragePoolListVolumes,
+
+ .volLookupByName = testStorageVolumeLookupByName,
+ .volLookupByKey = testStorageVolumeLookupByKey,
+ .volLookupByPath = testStorageVolumeLookupByPath,
+ .volCreateXML = testStorageVolumeCreateXML,
+ .volDelete = testStorageVolumeDelete,
+ .volGetInfo = testStorageVolumeGetInfo,
+ .volGetXMLDesc = testStorageVolumeGetXMLDesc,
+ .volGetPath = testStorageVolumeGetPath,
};
/**
16 years, 1 month
[libvirt] [PATCH] Domain Events Python Bindings
by Ben Guthro
Attached are the python bindings for domain events
I have moved much of the complicated code from my prior submission out of C and into python.
This required a slight change to the generator.
The new convention that we came up with is to append <classname>.py to the class as it is being generated, iff that file exists.
examples/domain-events/events-python/event-test.py | 186 +++++++++
python/generator.py | 16
python/libvir.c | 410 +++++++++++++++++++++
python/libvir.py | 20 +
python/libvirt_wrap.h | 27 +
python/types.c | 47 ++
python/virConnect.py | 46 ++
7 files changed, 747 insertions(+), 5 deletions(-)
16 years, 1 month
[libvirt] PATCH: Move virRaiseError out of internal.h
by Daniel P. Berrange
This patch moves the definition for virRaiseError/virReportError out of
the internal.h file, and into a newly created virterror.h file, to match
naming of the virterror.c file where the implementation lives. Most
code has to be updated to include virterror.h. This patch also drops the
leading __ prefix on these two functions - it was pointless, since we never
export it from the .so, not even for libvirtd use.
The motivation for this change is to get clarity over our modularization.
Every file in our source tree ultimately includes internal.h, but not
everything is linking to the virterror.c file which includes the impl of
virRaiseError. So it is good to avoid defining functions in header files
which aren't available to those including the header.
I've got a couple more patches of this type to following, so ultimately
internal.h will just contain a bunch of common / useful macros and the
include of the public libvirt.h file.
The diffstat is large, but its mostly line noise - there's no functional
change in this patch.
b/src/virterror.h | 56 +++++++++++++++++++++++++++++++++
src/conf.c | 8 ++--
src/domain_conf.c | 5 +--
src/hash.c | 17 +++++-----
src/internal.h | 24 --------------
src/libvirt.c | 44 +++++++++++++-------------
src/lxc_conf.c | 1
src/lxc_conf.h | 2 -
src/lxc_container.c | 1
src/lxc_controller.c | 2 -
src/lxc_driver.c | 2 -
src/network_conf.c | 5 +--
src/network_driver.c | 3 +
src/nodeinfo.c | 16 ++++-----
src/openvz_conf.c | 1
src/openvz_conf.h | 2 -
src/openvz_driver.c | 2 -
src/proxy_internal.c | 5 +--
src/qemu_conf.c | 1
src/qemu_conf.h | 2 -
src/qemu_driver.c | 1
src/qparams.c | 3 +
src/remote_internal.c | 70 +++++++++++++++++++++---------------------
src/sexpr.c | 4 +-
src/stats_linux.c | 6 +--
src/storage_backend.c | 2 -
src/storage_backend_disk.c | 2 -
src/storage_backend_fs.c | 2 -
src/storage_backend_iscsi.c | 2 -
src/storage_backend_logical.c | 2 -
src/storage_conf.c | 2 -
src/storage_conf.h | 2 -
src/storage_driver.c | 2 -
src/test.c | 4 +-
src/util.c | 4 +-
src/virterror.c | 57 ++++++++++++++++------------------
src/xen_internal.c | 25 +++++++--------
src/xen_unified.c | 4 +-
src/xend_internal.c | 3 +
src/xm_internal.c | 3 +
src/xml.c | 5 +--
src/xmlrpc.c | 6 +--
src/xs_internal.c | 4 +-
43 files changed, 228 insertions(+), 186 deletions(-)
Daniel
diff -r a1dc6ccb7f50 src/conf.c
--- a/src/conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -18,7 +18,7 @@
#include <sys/stat.h>
#include <fcntl.h>
-#include "internal.h"
+#include "virterror.h"
#include "buf.h"
#include "conf.h"
#include "util.h"
@@ -96,13 +96,13 @@
/* Construct the string 'filename:line: info' if we have that. */
if (ctxt && ctxt->filename) {
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+ virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
info, ctxt->filename, NULL,
ctxt->line, 0,
"%s:%d: %s", ctxt->filename, ctxt->line, info);
} else {
- format = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+ format = virErrorMsg(error, info);
+ virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
info, NULL, NULL,
ctxt ? ctxt->line : 0, 0,
format, info);
diff -r a1dc6ccb7f50 src/domain_conf.c
--- a/src/domain_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/domain_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -29,8 +29,7 @@
#include <fcntl.h>
#include <dirent.h>
-#include "internal.h"
-
+#include "virterror.h"
#include "domain_conf.h"
#include "memory.h"
#include "verify.h"
@@ -142,7 +141,7 @@
"pci")
#define virDomainReportError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_DOMAIN, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_DOMAIN, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
virDomainObjPtr virDomainFindByID(const virDomainObjListPtr doms,
diff -r a1dc6ccb7f50 src/hash.c
--- a/src/hash.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/hash.c Wed Oct 29 11:36:21 2008 +0000
@@ -23,7 +23,8 @@
#include <string.h>
#include <stdlib.h>
#include <libxml/threads.h>
-#include "internal.h"
+
+#include "virterror.h"
#include "hash.h"
#include "memory.h"
@@ -32,7 +33,7 @@
/* #define DEBUG_GROW */
#define virHashError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_NONE, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_NONE, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
/*
@@ -732,8 +733,8 @@
virHashFree(conn->storageVols, (virHashDeallocator) virStorageVolFreeName);
virResetError(&conn->err);
- if (__lastErr.conn == conn)
- __lastErr.conn = NULL;
+ if (virLastErr.conn == conn)
+ virLastErr.conn = NULL;
VIR_FREE(conn->name);
@@ -862,8 +863,8 @@
if (conn->err.dom == domain)
conn->err.dom = NULL;
- if (__lastErr.dom == domain)
- __lastErr.dom = NULL;
+ if (virLastErr.dom == domain)
+ virLastErr.dom = NULL;
domain->magic = -1;
domain->id = -1;
VIR_FREE(domain->name);
@@ -998,8 +999,8 @@
if (conn->err.net == network)
conn->err.net = NULL;
- if (__lastErr.net == network)
- __lastErr.net = NULL;
+ if (virLastErr.net == network)
+ virLastErr.net = NULL;
network->magic = -1;
VIR_FREE(network->name);
diff -r a1dc6ccb7f50 src/internal.h
--- a/src/internal.h Wed Oct 29 11:29:16 2008 +0000
+++ b/src/internal.h Wed Oct 29 11:36:21 2008 +0000
@@ -295,30 +295,6 @@
};
-/************************************************************************
- * *
- * API for error handling *
- * *
- ************************************************************************/
-extern virError __lastErr;
-void __virRaiseError(virConnectPtr conn,
- virDomainPtr dom,
- virNetworkPtr net,
- int domain,
- int code,
- virErrorLevel level,
- const char *str1,
- const char *str2,
- const char *str3,
- int int1, int int2, const char *msg, ...)
- ATTRIBUTE_FORMAT(printf, 12, 13);
-const char *__virErrorMsg(virErrorNumber error, const char *info);
-void __virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
- const char *filename ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- long long linenr ATTRIBUTE_UNUSED,
- const char *fmt, ...)
- ATTRIBUTE_FORMAT(printf, 7, 8);
/************************************************************************
* *
diff -r a1dc6ccb7f50 src/libvirt.c
--- a/src/libvirt.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/libvirt.c Wed Oct 29 11:36:21 2008 +0000
@@ -31,7 +31,7 @@
#include <winsock2.h>
#endif
-#include "internal.h"
+#include "virterror.h"
#include "driver.h"
#include "uuid.h"
@@ -325,9 +325,9 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ errmsg = virErrorMsg(error, info);
+ virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -346,9 +346,9 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_WARNING,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ errmsg = virErrorMsg(error, info);
+ virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_WARNING,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -369,12 +369,12 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
+ errmsg = virErrorMsg(error, info);
if (error != VIR_ERR_INVALID_DOMAIN) {
conn = domain->conn;
}
- __virRaiseError(conn, domain, NULL, VIR_FROM_DOM, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ virRaiseError(conn, domain, NULL, VIR_FROM_DOM, error, VIR_ERR_ERROR,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -395,12 +395,12 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
+ errmsg = virErrorMsg(error, info);
if (error != VIR_ERR_INVALID_NETWORK) {
conn = network->conn;
}
- __virRaiseError(conn, NULL, network, VIR_FROM_NET, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ virRaiseError(conn, NULL, network, VIR_FROM_NET, error, VIR_ERR_ERROR,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -421,12 +421,12 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
+ errmsg = virErrorMsg(error, info);
if (error != VIR_ERR_INVALID_STORAGE_POOL)
conn = pool->conn;
- __virRaiseError(conn, NULL, NULL, VIR_FROM_STORAGE, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ virRaiseError(conn, NULL, NULL, VIR_FROM_STORAGE, error, VIR_ERR_ERROR,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -447,12 +447,12 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
+ errmsg = virErrorMsg(error, info);
if (error != VIR_ERR_INVALID_STORAGE_VOL)
conn = vol->conn;
- __virRaiseError(conn, NULL, NULL, VIR_FROM_STORAGE, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
+ virRaiseError(conn, NULL, NULL, VIR_FROM_STORAGE, error, VIR_ERR_ERROR,
+ errmsg, info, NULL, 0, 0, errmsg, info);
}
/**
@@ -855,13 +855,13 @@
/* If no global error was set, copy any error set
in the connection object we're about to dispose of */
- if (__lastErr.code == VIR_ERR_OK) {
- memcpy(&__lastErr, &ret->err, sizeof(ret->err));
+ if (virLastErr.code == VIR_ERR_OK) {
+ memcpy(&virLastErr, &ret->err, sizeof(ret->err));
memset(&ret->err, 0, sizeof(ret->err));
}
/* Still no error set, then raise a generic error */
- if (__lastErr.code == VIR_ERR_OK)
+ if (virLastErr.code == VIR_ERR_OK)
virLibConnError (NULL, VIR_ERR_INTERNAL_ERROR,
_("unable to open connection"));
diff -r a1dc6ccb7f50 src/lxc_conf.c
--- a/src/lxc_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/lxc_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -27,6 +27,7 @@
#include <sys/utsname.h>
+#include "virterror.h"
#include "lxc_conf.h"
/* Functions */
diff -r a1dc6ccb7f50 src/lxc_conf.h
--- a/src/lxc_conf.h Wed Oct 29 11:29:16 2008 +0000
+++ b/src/lxc_conf.h Wed Oct 29 11:36:21 2008 +0000
@@ -50,7 +50,7 @@
virCapsPtr lxcCapsInit(void);
#define lxcError(conn, dom, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_LXC, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_LXC, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
#endif /* LXC_CONF_H */
diff -r a1dc6ccb7f50 src/lxc_container.c
--- a/src/lxc_container.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/lxc_container.c Wed Oct 29 11:36:21 2008 +0000
@@ -41,6 +41,7 @@
/* For MS_MOVE */
#include <linux/fs.h>
+#include "virterror.h"
#include "lxc_container.h"
#include "util.h"
#include "memory.h"
diff -r a1dc6ccb7f50 src/lxc_controller.c
--- a/src/lxc_controller.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/lxc_controller.c Wed Oct 29 11:36:21 2008 +0000
@@ -34,7 +34,7 @@
#include <signal.h>
#include <getopt.h>
-#include "internal.h"
+#include "virterror.h"
#include "util.h"
#include "lxc_conf.h"
diff -r a1dc6ccb7f50 src/lxc_driver.c
--- a/src/lxc_driver.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/lxc_driver.c Wed Oct 29 11:36:21 2008 +0000
@@ -35,7 +35,7 @@
#include <unistd.h>
#include <wait.h>
-#include "internal.h"
+#include "virterror.h"
#include "lxc_conf.h"
#include "lxc_container.h"
#include "lxc_driver.h"
diff -r a1dc6ccb7f50 src/network_conf.c
--- a/src/network_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/network_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -33,8 +33,7 @@
#include <string.h>
#include <dirent.h>
-#include "internal.h"
-
+#include "virterror.h"
#include "network_conf.h"
#include "memory.h"
#include "xml.h"
@@ -50,7 +49,7 @@
"none", "nat", "route" )
#define virNetworkReportError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_NETWORK, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_NETWORK, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjListPtr nets,
diff -r a1dc6ccb7f50 src/network_driver.c
--- a/src/network_driver.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/network_driver.c Wed Oct 29 11:36:21 2008 +0000
@@ -44,6 +44,7 @@
#include <sys/wait.h>
#include <sys/ioctl.h>
+#include "virterror.h"
#include "network_driver.h"
#include "network_conf.h"
#include "driver.h"
@@ -73,7 +74,7 @@
#define networkLog(level, msg...) fprintf(stderr, msg)
#define networkReportError(conn, dom, net, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
diff -r a1dc6ccb7f50 src/nodeinfo.c
--- a/src/nodeinfo.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/nodeinfo.c Wed Oct 29 11:36:21 2008 +0000
@@ -33,7 +33,7 @@
#include <sys/utsname.h>
#endif
-#include "internal.h"
+#include "virterror.h"
#include "nodeinfo.h"
#include "physmem.h"
#include "util.h"
@@ -63,7 +63,7 @@
while (*buf && c_isspace(*buf))
buf++;
if (*buf != ':') {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"parsing cpuinfo processor");
return -1;
@@ -76,7 +76,7 @@
while (*buf && c_isspace(*buf))
buf++;
if (*buf != ':' || !buf[1]) {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"parsing cpuinfo cpu MHz");
return -1;
@@ -92,7 +92,7 @@
while (*buf && c_isspace(*buf))
buf++;
if (*buf != ':' || !buf[1]) {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"parsing cpuinfo cpu cores %c", *buf);
return -1;
@@ -105,7 +105,7 @@
}
if (!nodeinfo->cpus) {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"no cpus found");
return -1;
@@ -129,7 +129,7 @@
struct utsname info;
if (uname(&info) < 0) {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"cannot extract machine type %s", strerror(errno));
return -1;
@@ -148,7 +148,7 @@
int ret;
FILE *cpuinfo = fopen(CPUINFO_PATH, "r");
if (!cpuinfo) {
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"cannot open %s %s", CPUINFO_PATH, strerror(errno));
return -1;
@@ -165,7 +165,7 @@
}
#else
/* XXX Solaris will need an impl later if they port QEMU driver */
- __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+ virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"%s:%s not implemented on this platform\n", __FILE__, __FUNCTION__);
return -1;
diff -r a1dc6ccb7f50 src/openvz_conf.c
--- a/src/openvz_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/openvz_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -43,6 +43,7 @@
#include <sys/utsname.h>
#include <sys/wait.h>
+#include "virterror.h"
#include "openvz_conf.h"
#include "uuid.h"
#include "buf.h"
diff -r a1dc6ccb7f50 src/openvz_conf.h
--- a/src/openvz_conf.h Wed Oct 29 11:29:16 2008 +0000
+++ b/src/openvz_conf.h Wed Oct 29 11:36:21 2008 +0000
@@ -42,7 +42,7 @@
fprintf(stderr, "\n"); }
#define openvzError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_OPENVZ, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_OPENVZ, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
diff -r a1dc6ccb7f50 src/openvz_driver.c
--- a/src/openvz_driver.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/openvz_driver.c Wed Oct 29 11:36:21 2008 +0000
@@ -47,7 +47,7 @@
#include <stdio.h>
#include <sys/wait.h>
-#include "internal.h"
+#include "virterror.h"
#include "openvz_driver.h"
#include "event.h"
#include "buf.h"
diff -r a1dc6ccb7f50 src/proxy_internal.c
--- a/src/proxy_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/proxy_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -21,7 +21,8 @@
#include <sys/un.h>
#include <sys/wait.h>
#include <string.h>
-#include "internal.h"
+
+#include "virterror.h"
#include "driver.h"
#include "proxy_internal.h"
#include "util.h"
@@ -93,7 +94,7 @@
************************************************************************/
#define virProxyError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_PROXY, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_PROXY, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
/************************************************************************
diff -r a1dc6ccb7f50 src/qemu_conf.c
--- a/src/qemu_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/qemu_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -40,6 +40,7 @@
#include <numa.h>
#endif
+#include "virterror.h"
#include "qemu_conf.h"
#include "uuid.h"
#include "buf.h"
diff -r a1dc6ccb7f50 src/qemu_conf.h
--- a/src/qemu_conf.h Wed Oct 29 11:29:16 2008 +0000
+++ b/src/qemu_conf.h Wed Oct 29 11:36:21 2008 +0000
@@ -70,7 +70,7 @@
#define qemudReportError(conn, dom, net, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
diff -r a1dc6ccb7f50 src/qemu_driver.c
--- a/src/qemu_driver.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/qemu_driver.c Wed Oct 29 11:36:21 2008 +0000
@@ -52,6 +52,7 @@
#include <sched.h>
#endif
+#include "virterror.h"
#include "qemu_driver.h"
#include "qemu_conf.h"
#include "c-ctype.h"
diff -r a1dc6ccb7f50 src/qparams.c
--- a/src/qparams.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/qparams.c Wed Oct 29 11:36:21 2008 +0000
@@ -26,12 +26,13 @@
#include <stdlib.h>
#include <stdarg.h>
+#include "virterror.h"
#include "buf.h"
#include "memory.h"
#include "qparams.h"
#define qparam_report_oom(void) \
- __virReportErrorHelper(NULL, VIR_FROM_NONE, VIR_ERR_NO_MEMORY, \
+ virReportErrorHelper(NULL, VIR_FROM_NONE, VIR_ERR_NO_MEMORY, \
__FILE__, __FUNCTION__, __LINE__, NULL)
struct qparam_set *
diff -r a1dc6ccb7f50 src/remote_internal.c
--- a/src/remote_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/remote_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -73,7 +73,7 @@
# define AI_ADDRCONFIG 0
#endif
-#include "internal.h"
+#include "virterror.h"
#include "driver.h"
#include "buf.h"
#include "qparams.h"
@@ -3675,7 +3675,7 @@
} else if (STRCASEEQ(authtype, "polkit")) {
want = REMOTE_AUTH_POLKIT;
} else {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
_("unknown authentication type %s"), authtype);
@@ -3686,7 +3686,7 @@
type = want;
}
if (type == REMOTE_AUTH_NONE) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("requested authentication type %s rejected"),
authtype);
@@ -3726,7 +3726,7 @@
break;
default:
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
_("unsupported authentication type %d"),
@@ -3756,7 +3756,7 @@
host, sizeof(host),
port, sizeof(port),
NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
- __virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
_("Cannot resolve address %d: %s"),
@@ -3765,7 +3765,7 @@
}
if (VIR_ALLOC_N(addr, strlen(host) + 1 + strlen(port) + 1) < 0) {
- __virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
"address");
@@ -3975,7 +3975,7 @@
/* Sets up the SASL library as a whole */
err = sasl_client_init(NULL);
if (err != SASL_OK) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("failed to initialize SASL library: %d (%s)"),
err, sasl_errstring(err, NULL, NULL));
@@ -3985,7 +3985,7 @@
/* Get local address in form IPADDR:PORT */
salen = sizeof(sa);
if (getsockname(priv->sock, (struct sockaddr*)&sa, &salen) < 0) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("failed to get sock address %d (%s)"),
errno, strerror(errno));
@@ -3997,7 +3997,7 @@
/* Get remote address in form IPADDR:PORT */
salen = sizeof(sa);
if (getpeername(priv->sock, (struct sockaddr*)&sa, &salen) < 0) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("failed to get peer address %d (%s)"),
errno, strerror(errno));
@@ -4023,7 +4023,7 @@
&saslconn);
if (err != SASL_OK) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("Failed to create SASL client context: %d (%s)"),
err, sasl_errstring(err, NULL, NULL));
@@ -4036,7 +4036,7 @@
cipher = gnutls_cipher_get(priv->session);
if (!(ssf = (sasl_ssf_t)gnutls_cipher_get_key_size(cipher))) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_INTERNAL_ERROR, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"%s", _("invalid cipher size for TLS session"));
goto cleanup;
@@ -4046,7 +4046,7 @@
DEBUG("Setting external SSF %d", ssf);
err = sasl_setprop(saslconn, SASL_SSF_EXTERNAL, &ssf);
if (err != SASL_OK) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_INTERNAL_ERROR, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("cannot set external SSF %d (%s)"),
err, sasl_errstring(err, NULL, NULL));
@@ -4065,7 +4065,7 @@
err = sasl_setprop(saslconn, SASL_SEC_PROPS, &secprops);
if (err != SASL_OK) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_INTERNAL_ERROR, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("cannot set security props %d (%s)"),
err, sasl_errstring(err, NULL, NULL));
@@ -4083,7 +4083,7 @@
mechlist = iret.mechlist;
if (wantmech) {
if (strstr(mechlist, wantmech) == NULL) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
_("SASL mechanism %s not supported by server"),
@@ -4103,7 +4103,7 @@
&clientoutlen,
&mech);
if (err != SASL_OK && err != SASL_CONTINUE && err != SASL_INTERACT) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("Failed to start SASL negotiation: %d (%s)"),
err, sasl_errdetail(saslconn));
@@ -4120,7 +4120,7 @@
}
if ((ncred =
remoteAuthMakeCredentials(interact, &cred)) < 0) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR,
NULL, NULL, NULL, 0, 0,
"%s", _("Failed to make auth credentials"));
@@ -4137,7 +4137,7 @@
} else {
msg = "No authentication callback available";
}
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL,
0, 0, "%s", msg);
goto cleanup;
@@ -4145,7 +4145,7 @@
VIR_FREE(iret.mechlist);
if (clientoutlen > REMOTE_AUTH_SASL_DATA_MAX) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("SASL negotiation data too long: %d bytes"),
clientoutlen);
@@ -4185,7 +4185,7 @@
&clientout,
&clientoutlen);
if (err != SASL_OK && err != SASL_CONTINUE && err != SASL_INTERACT) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("Failed SASL step: %d (%s)"),
err, sasl_errdetail(saslconn));
@@ -4199,7 +4199,7 @@
cred = NULL;
}
if ((ncred = remoteAuthMakeCredentials(interact, &cred)) < 0) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"%s", _("Failed to make auth credentials"));
goto cleanup;
@@ -4214,7 +4214,7 @@
} else {
msg = "No authentication callback available";
}
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL,
0, 0, "%s", msg);
goto cleanup;
@@ -4262,7 +4262,7 @@
if (!priv->uses_tls) {
err = sasl_getprop(saslconn, SASL_SSF, &val);
if (err != SASL_OK) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("cannot query SASL ssf on connection %d (%s)"),
err, sasl_errstring(err, NULL, NULL));
@@ -4271,7 +4271,7 @@
ssf = *(const int *)val;
DEBUG("SASL SSF value %d", ssf);
if (ssf < 56) { /* 56 == DES level, good for Kerberos */
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("negotiation SSF %d was not strong enough"), ssf);
goto cleanup;
@@ -4325,7 +4325,7 @@
if (allowcb) {
/* Run the authentication callback */
if ((*(auth->cb))(&cred, 1, auth->cbdata) < 0) {
- __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
"%s", _("Failed to collect auth credentials"));
return -1;
@@ -4509,7 +4509,7 @@
/* Check program, version, etc. are what we expect. */
if (hdr.prog != REMOTE_PROGRAM) {
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown program (received %x, expected %x)"),
@@ -4517,7 +4517,7 @@
return -1;
}
if (hdr.vers != REMOTE_PROTOCOL_VERSION) {
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown protocol version (received %x, expected %x)"),
@@ -4540,7 +4540,7 @@
goto retry_read;
}
if (hdr.proc != proc_nr) {
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown procedure (received %x, expected %x)"),
@@ -4548,7 +4548,7 @@
return -1;
}
if (hdr.direction != REMOTE_REPLY) {
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn,
NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown direction (received %x, expected %x)"),
@@ -4556,7 +4556,7 @@
return -1;
}
if (hdr.serial != serial) {
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown serial (received %x, expected %x)"),
hdr.serial, serial);
@@ -4599,7 +4599,7 @@
return -1;
default:
- __virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
+ virRaiseError (flags & REMOTE_CALL_IN_OPEN ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE,
VIR_ERR_RPC, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
_("unknown status (received %x)"),
hdr.status);
@@ -4809,8 +4809,8 @@
{
const char *errmsg;
- errmsg = __virErrorMsg (code, info);
- __virRaiseError (conn, NULL, NULL, VIR_FROM_REMOTE,
+ errmsg = virErrorMsg (code, info);
+ virRaiseError (conn, NULL, NULL, VIR_FROM_REMOTE,
code, VIR_ERR_ERROR, errmsg, info, NULL, 0, 0,
errmsg, info);
}
@@ -4832,8 +4832,8 @@
errorMessage[0] = '\0';
}
- errmsg = __virErrorMsg (code, errorMessage);
- __virRaiseError (conn, NULL, NULL, VIR_FROM_REMOTE,
+ errmsg = virErrorMsg (code, errorMessage);
+ virRaiseError (conn, NULL, NULL, VIR_FROM_REMOTE,
code, VIR_ERR_ERROR,
errmsg, errorMessage, NULL, -1, -1,
errmsg, errorMessage);
@@ -4850,7 +4850,7 @@
dom = err->dom ? get_nonnull_domain (conn, *err->dom) : NULL;
net = err->net ? get_nonnull_network (conn, *err->net) : NULL;
- __virRaiseError (conn, dom, net,
+ virRaiseError (conn, dom, net,
err->domain, err->code, err->level,
err->str1 ? *err->str1 : NULL,
err->str2 ? *err->str2 : NULL,
diff -r a1dc6ccb7f50 src/sexpr.c
--- a/src/sexpr.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/sexpr.c Wed Oct 29 11:36:21 2008 +0000
@@ -18,13 +18,13 @@
#include "c-ctype.h"
#include <errno.h>
-#include "internal.h"
+#include "virterror.h"
#include "sexpr.h"
#include "util.h"
#include "memory.h"
#define virSexprError(code, fmt...) \
- __virReportErrorHelper(NULL, VIR_FROM_SEXPR, code, __FILE__, \
+ virReportErrorHelper(NULL, VIR_FROM_SEXPR, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
/**
diff -r a1dc6ccb7f50 src/stats_linux.c
--- a/src/stats_linux.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/stats_linux.c Wed Oct 29 11:36:21 2008 +0000
@@ -24,7 +24,7 @@
#include <xs.h>
#endif
-#include "internal.h"
+#include "virterror.h"
#include "util.h"
#include "xen_unified.h"
#include "stats_linux.h"
@@ -48,13 +48,13 @@
char fullinfo[1000];
const char *errmsg;
- errmsg = __virErrorMsg(error, info);
+ errmsg = virErrorMsg(error, info);
if (func != NULL) {
snprintf(fullinfo, sizeof (fullinfo) - 1, "%s: %s", func, info);
fullinfo[sizeof (fullinfo) - 1] = 0;
info = fullinfo;
}
- __virRaiseError(conn, NULL, NULL, VIR_FROM_STATS_LINUX, error,
+ virRaiseError(conn, NULL, NULL, VIR_FROM_STATS_LINUX, error,
VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info,
value);
diff -r a1dc6ccb7f50 src/storage_backend.c
--- a/src/storage_backend.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_backend.c Wed Oct 29 11:36:21 2008 +0000
@@ -41,7 +41,7 @@
#include <selinux/selinux.h>
#endif
-#include "internal.h"
+#include "virterror.h"
#include "util.h"
#include "memory.h"
diff -r a1dc6ccb7f50 src/storage_backend_disk.c
--- a/src/storage_backend_disk.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_backend_disk.c Wed Oct 29 11:36:21 2008 +0000
@@ -25,7 +25,7 @@
#include <string.h>
#include <unistd.h>
-#include "internal.h"
+#include "virterror.h"
#include "storage_backend_disk.h"
#include "util.h"
#include "memory.h"
diff -r a1dc6ccb7f50 src/storage_backend_fs.c
--- a/src/storage_backend_fs.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_backend_fs.c Wed Oct 29 11:36:21 2008 +0000
@@ -40,7 +40,7 @@
#include <libxml/tree.h>
#include <libxml/xpath.h>
-#include "internal.h"
+#include "virterror.h"
#include "storage_backend_fs.h"
#include "storage_conf.h"
#include "util.h"
diff -r a1dc6ccb7f50 src/storage_backend_iscsi.c
--- a/src/storage_backend_iscsi.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_backend_iscsi.c Wed Oct 29 11:36:21 2008 +0000
@@ -34,7 +34,7 @@
#include <unistd.h>
#include <dirent.h>
-#include "internal.h"
+#include "virterror.h"
#include "storage_backend_iscsi.h"
#include "util.h"
#include "memory.h"
diff -r a1dc6ccb7f50 src/storage_backend_logical.c
--- a/src/storage_backend_logical.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_backend_logical.c Wed Oct 29 11:36:21 2008 +0000
@@ -31,7 +31,7 @@
#include <unistd.h>
#include <fcntl.h>
-#include "internal.h"
+#include "virterror.h"
#include "storage_backend_logical.h"
#include "storage_conf.h"
#include "util.h"
diff -r a1dc6ccb7f50 src/storage_conf.c
--- a/src/storage_conf.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_conf.c Wed Oct 29 11:36:21 2008 +0000
@@ -38,7 +38,7 @@
#include <fcntl.h>
#include <string.h>
-#include "internal.h"
+#include "virterror.h"
#include "storage_conf.h"
#include "storage_backend.h"
#include "xml.h"
diff -r a1dc6ccb7f50 src/storage_conf.h
--- a/src/storage_conf.h Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_conf.h Wed Oct 29 11:36:21 2008 +0000
@@ -262,7 +262,7 @@
}
#define virStorageReportError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_STORAGE, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_STORAGE, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
int virStoragePoolLoadAllConfigs(virConnectPtr conn,
diff -r a1dc6ccb7f50 src/storage_driver.c
--- a/src/storage_driver.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/storage_driver.c Wed Oct 29 11:36:21 2008 +0000
@@ -32,7 +32,7 @@
#include <errno.h>
#include <string.h>
-#include "internal.h"
+#include "virterror.h"
#include "driver.h"
#include "util.h"
#include "storage_driver.h"
diff -r a1dc6ccb7f50 src/test.c
--- a/src/test.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/test.c Wed Oct 29 11:36:21 2008 +0000
@@ -30,6 +30,8 @@
#include <unistd.h>
#include <sys/stat.h>
+
+#include "virterror.h"
#include "test.h"
#include "buf.h"
#include "util.h"
@@ -113,7 +115,7 @@
#define testError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_TEST, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_TEST, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
static virCapsPtr
diff -r a1dc6ccb7f50 src/util.c
--- a/src/util.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/util.c Wed Oct 29 11:36:21 2008 +0000
@@ -47,7 +47,7 @@
#include <paths.h>
#endif
-#include "internal.h"
+#include "virterror.h"
#include "event.h"
#include "buf.h"
#include "util.h"
@@ -67,7 +67,7 @@
#ifndef PROXY
#define ReportError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_NONE, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_NONE, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
int virFileStripSuffix(char *str,
diff -r a1dc6ccb7f50 src/virterror.c
--- a/src/virterror.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/virterror.c Wed Oct 29 11:36:21 2008 +0000
@@ -15,18 +15,17 @@
#include <string.h>
#include <stdarg.h>
-#include "internal.h"
-#include "libvirt/virterror.h"
+#include "virterror.h"
-virError __lastErr = /* the last error */
+virError virLastErr = /* the last error */
{ .code = 0, .domain = 0, .message = NULL, .level = VIR_ERR_NONE,
.conn = NULL, .dom = NULL, .str1 = NULL, .str2 = NULL, .str3 = NULL,
.int1 = 0, .int2 = 0, .net = NULL };
-static virErrorFunc virErrorHandler = NULL; /* global error handler */
-static void *virUserData = NULL; /* associated data */
+virErrorFunc virErrorHandler = NULL; /* global error handler */
+void *virUserData = NULL; /* associated data */
/*
- * Macro used to format the message as a string in __virRaiseError
+ * Macro used to format the message as a string in virRaiseError
* and borrowed from libxml2.
*/
#define VIR_GET_VAR_STR(msg, str) { \
@@ -74,9 +73,9 @@
virErrorPtr
virGetLastError(void)
{
- if (__lastErr.code == VIR_ERR_OK)
+ if (virLastErr.code == VIR_ERR_OK)
return (NULL);
- return (&__lastErr);
+ return (&virLastErr);
}
/*
@@ -94,10 +93,10 @@
{
if (to == NULL)
return (-1);
- if (__lastErr.code == VIR_ERR_OK)
+ if (virLastErr.code == VIR_ERR_OK)
return (0);
- memcpy(to, &__lastErr, sizeof(virError));
- return (__lastErr.code);
+ memcpy(to, &virLastErr, sizeof(virError));
+ return (virLastErr.code);
}
/**
@@ -126,7 +125,7 @@
void
virResetLastError(void)
{
- virResetError(&__lastErr);
+ virResetError(&virLastErr);
}
/**
@@ -331,7 +330,7 @@
}
/**
- * __virRaiseError:
+ * virRaiseError:
* @conn: the connection to the hypervisor if available
* @dom: the domain if available
* @net: the network if available
@@ -350,12 +349,12 @@
* immediately if a callback is found and store it for later handling.
*/
void
-__virRaiseError(virConnectPtr conn, virDomainPtr dom, virNetworkPtr net,
- int domain, int code, virErrorLevel level,
- const char *str1, const char *str2, const char *str3,
- int int1, int int2, const char *msg, ...)
+virRaiseError(virConnectPtr conn, virDomainPtr dom, virNetworkPtr net,
+ int domain, int code, virErrorLevel level,
+ const char *str1, const char *str2, const char *str3,
+ int int1, int int2, const char *msg, ...)
{
- virErrorPtr to = &__lastErr;
+ virErrorPtr to = &virLastErr;
void *userData = virUserData;
virErrorFunc handler = virErrorHandler;
char *str;
@@ -414,7 +413,7 @@
}
/**
- * __virErrorMsg:
+ * virErrorMsg:
* @error: the virErrorNumber
* @info: usually the first parameter string
*
@@ -424,7 +423,7 @@
* Returns the constant string associated to @error
*/
const char *
-__virErrorMsg(virErrorNumber error, const char *info)
+virErrorMsg(virErrorNumber error, const char *info)
{
const char *errmsg = NULL;
@@ -724,7 +723,7 @@
}
/**
- * __virReportErrorHelper
+ * virReportErrorHelper
*
* @conn: the connection to the hypervisor if available
* @dom: the domain if available
@@ -740,11 +739,11 @@
* Helper function to do most of the grunt work for individual driver
* ReportError
*/
-void __virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
- const char *filename ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- long long linenr ATTRIBUTE_UNUSED,
- const char *fmt, ...)
+void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
+ const char *filename ATTRIBUTE_UNUSED,
+ const char *funcname ATTRIBUTE_UNUSED,
+ long long linenr ATTRIBUTE_UNUSED,
+ const char *fmt, ...)
{
va_list args;
char errorMessage[1024];
@@ -758,8 +757,8 @@
errorMessage[0] = '\0';
}
- virerr = __virErrorMsg(errcode, (errorMessage[0] ? errorMessage : NULL));
- __virRaiseError(conn, NULL, NULL, domcode, errcode, VIR_ERR_ERROR,
- virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
+ virerr = virErrorMsg(errcode, (errorMessage[0] ? errorMessage : NULL));
+ virRaiseError(conn, NULL, NULL, domcode, errcode, VIR_ERR_ERROR,
+ virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
}
diff -r a1dc6ccb7f50 src/virterror.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/virterror.h Wed Oct 29 11:36:21 2008 +0000
@@ -0,0 +1,56 @@
+/*
+ * virterror.h: internal error handling
+ *
+ * Copyright (C) 2006-2008 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __VIRT_ERROR_H_
+#define __VIRT_ERROR_H_
+
+#include "internal.h"
+
+extern virError virLastErr;
+extern virErrorFunc virErrorHandler;
+extern void *virUserData;
+
+/************************************************************************
+ * *
+ * API for error handling *
+ * *
+ ************************************************************************/
+void virRaiseError(virConnectPtr conn,
+ virDomainPtr dom,
+ virNetworkPtr net,
+ int domain,
+ int code,
+ virErrorLevel level,
+ const char *str1,
+ const char *str2,
+ const char *str3,
+ int int1, int int2, const char *msg, ...)
+ ATTRIBUTE_FORMAT(printf, 12, 13);
+const char *virErrorMsg(virErrorNumber error, const char *info);
+void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
+ const char *filename ATTRIBUTE_UNUSED,
+ const char *funcname ATTRIBUTE_UNUSED,
+ long long linenr ATTRIBUTE_UNUSED,
+ const char *fmt, ...)
+ ATTRIBUTE_FORMAT(printf, 7, 8);
+
+
+#endif
diff -r a1dc6ccb7f50 src/xen_internal.c
--- a/src/xen_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xen_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -26,11 +26,6 @@
#include <errno.h>
#include <sys/utsname.h>
-#include "xs_internal.h"
-#include "stats_linux.h"
-#include "xend_internal.h"
-#include "util.h"
-
/* required for dom0_getdomaininfo_t */
#include <xen/dom0_ops.h>
#include <xen/version.h>
@@ -45,6 +40,14 @@
/* required for shutdown flags */
#include <xen/sched.h>
+#include "virterror.h"
+#include "driver.h"
+#include "util.h"
+#include "xen_unified.h"
+#include "xen_internal.h"
+#include "xs_internal.h"
+#include "stats_linux.h"
+#include "xend_internal.h"
#include "buf.h"
#include "capabilities.h"
#include "memory.h"
@@ -653,10 +656,6 @@
};
typedef struct xen_op_v2_dom xen_op_v2_dom;
-#include "internal.h"
-#include "driver.h"
-#include "xen_unified.h"
-#include "xen_internal.h"
#ifdef __linux__
#define XEN_HYPERVISOR_SOCKET "/proc/xen/privcmd"
@@ -720,7 +719,7 @@
#define virXenError(conn, code, fmt...) \
if (in_init == 0) \
- __virReportErrorHelper(conn, VIR_FROM_XEN, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_XEN, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
#ifndef PROXY
@@ -747,15 +746,15 @@
return;
- errmsg = __virErrorMsg(error, info);
+ errmsg =virErrorMsg(error, info);
if (func != NULL) {
snprintf(fullinfo, 999, "%s: %s", func, info);
fullinfo[999] = 0;
- __virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, fullinfo, NULL, value, 0, errmsg, fullinfo,
value);
} else {
- __virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info,
value);
}
diff -r a1dc6ccb7f50 src/xen_unified.c
--- a/src/xen_unified.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xen_unified.c Wed Oct 29 11:36:21 2008 +0000
@@ -27,7 +27,7 @@
#include <xen/dom0_ops.h>
#include <libxml/uri.h>
-#include "internal.h"
+#include "virterror.h"
#include "xen_unified.h"
@@ -59,7 +59,7 @@
};
#define xenUnifiedError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_XEN, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_XEN, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
/*
diff -r a1dc6ccb7f50 src/xend_internal.c
--- a/src/xend_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xend_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -32,6 +32,7 @@
#include <libxml/uri.h>
#include <errno.h>
+#include "virterror.h"
#include "xend_internal.h"
#include "driver.h"
#include "util.h"
@@ -105,7 +106,7 @@
#endif
#define virXendError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_XEND, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_XEND, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
#define virXendErrorInt(conn, code, ival) \
diff -r a1dc6ccb7f50 src/xm_internal.c
--- a/src/xm_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xm_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -35,6 +35,7 @@
#include <stdint.h>
#include <xen/dom0_ops.h>
+#include "virterror.h"
#include "xm_internal.h"
#include "xen_unified.h"
#include "xend_internal.h"
@@ -123,7 +124,7 @@
};
#define xenXMError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_XENXM, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_XENXM, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
int
diff -r a1dc6ccb7f50 src/xml.c
--- a/src/xml.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xml.c Wed Oct 29 11:36:21 2008 +0000
@@ -16,14 +16,15 @@
#include <stdarg.h>
#include <limits.h>
#include <math.h> /* for isnan() */
-#include "internal.h"
+
+#include "virterror.h"
#include "xml.h"
#include "buf.h"
#include "util.h"
#include "memory.h"
#define virXMLError(conn, code, fmt...) \
- __virReportErrorHelper(conn, VIR_FROM_XML, code, __FILE__, \
+ virReportErrorHelper(conn, VIR_FROM_XML, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
diff -r a1dc6ccb7f50 src/xmlrpc.c
--- a/src/xmlrpc.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xmlrpc.c Wed Oct 29 11:36:21 2008 +0000
@@ -11,7 +11,7 @@
#include <config.h>
#include "xmlrpc.h"
-#include "internal.h"
+#include "virterror.h"
#include "memory.h"
#include <libxml/nanohttp.h>
@@ -41,8 +41,8 @@
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
+ errmsg = virErrorMsg(error, info);
+ virRaiseError(NULL, NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info, value);
}
diff -r a1dc6ccb7f50 src/xs_internal.c
--- a/src/xs_internal.c Wed Oct 29 11:29:16 2008 +0000
+++ b/src/xs_internal.c Wed Oct 29 11:36:21 2008 +0000
@@ -26,7 +26,7 @@
#include <xs.h>
-#include "internal.h"
+#include "virterror.h"
#include "driver.h"
#include "xen_unified.h"
#include "xs_internal.h"
@@ -88,7 +88,7 @@
#endif /* ! PROXY */
#define virXenStoreError(conn, code, fmt...) \
- __virReportErrorHelper(NULL, VIR_FROM_XENSTORE, code, __FILE__, \
+ virReportErrorHelper(NULL, VIR_FROM_XENSTORE, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
/************************************************************************
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
16 years, 1 month
[libvirt] [RFC] sVirt v0.10 - initial prototype
by James Morris
This is a request for comments on the initial prototype release of sVirt,
a project to add security labeling support to Linux-based virtualization.
Project page:
http://www.selinuxproject.org/page/SVirt
Previous libvirt discussions:
High-level requirements:
https://www.redhat.com/archives/libvir-list/2008-August/msg00255.html
XML security labels:
https://www.redhat.com/archives/libvir-list/2008-August/msg00740.html
A patch for libvirt is attached; and also included in a release tarball at
http://namei.org/svirt/. See 'readme.txt' there for more details on
building and running the code.
The purpose of this release is to establish a proof of concept of applying
security labels to VMs, and for discussion of the underlying technical
approach.
With this release, it is possible to define a security label for a
kvm/qemu domain in its XML configuration ('virsh edit'), launch the domain
and have it transition to the specified security label ('virsh start'),
then query the security label of the running domain ('virsh dominfo').
The following changes were made to libvirt:
1. Implementing a pluggable security label driver framework;
2. Implementing an SELinux security label driver for (1);
3. Wiring the security label framework into the Qemu driver;
4. Implementing basic libvirt API calls for initializing the driver,
and getting/setting domain security labels;
5. Extending the domain XML configuration to include security labels;
6. Adding domain security label display/edit/dump support to virsh.
One of the design principles I've followed with this is to reduce or
eliminate configuration wherever possible. If a variety of security
labeling drivers are present, libvirtd automatically detects which one to
enable and enables it. e.g. if SELinux is enabled on the system, the
SELinux labeling driver is enabled automatically when livbirtd starts.
Another is to treat security labels as opaque unless they're actually
being used for security purposes (e.g. to launch the domain). So, virsh
and the domain configuration code currently do not need to semantically
interpet security labels, just understand their format. This should suit
the initial simple goal of isolated domains, which only requires security
labels to be distinct.
The domain security label configuration format is as follows:
# virsh dumpxml sys1
<domain>
....
<seclabel model='selinux'>
<label>system_u:system_r:virtd_t:s0</label>
<policytype>targeted</policytype>
</seclabel>
</domain>
It's possible to query the security label of a running domain via virsh:
# virsh dominfo sys1
Id: 1
Name: sys1
UUID: fa3c8e06-0877-2a08-06fd-f2479b7bacb4
OS Type: hvm
State: running
CPU(s): 1
CPU time: 11.4s
Max memory: 524288 kB
Used memory: 524288 kB
Autostart: disable
Security label: system_u:system_r:virtd_t:s0 (selinux/targeted/enforcing)
The security label is deterimed via the new virDomainGetSecLabel() API
method, which is transported over RPC to the backend driver (qemu in this
case), and is entirely independent of the local security model, if any.
e.g. this command could be run remotely from an entirely different
platform: you just see what's happening on the remote system, as with
other attributes of the domain.
Feedback on the design thus far is sought before proceeding to more
comprehensive integration.
In particular, I'd be interested in any thoughts on the placement of the
security labeling driver within libvirt, as this seems to be the most
critical architectural issue (I've already refactored this aspect once).
Currently, the idea is to attach the security labeling driver to the virt
driver, rather than implement it independently as a top-level component as
in the case of other types of drivers (e.g. storage). This is because
process-based security labeling is highly dependent on the kind of
virtualization in use, and may not make sense at all in some cases (e.g.
when using a non-Linux hypervisor, or containers).
In the case of qemu, a security labeling driver is added to qemud:
@@ -63,6 +64,7 @@ struct qemud_driver {
char *vncListen;
virCapsPtr caps;
+ virSecLabelDriverPtr secLabelDriver;
};
and then initialized during qemud startup from qemudSecLabelInit().
During initialization, any available security labeling drivers are probed,
and the first one which thinks it should be used is installed. Top-level
libvirt API calls are then dispatched to the active security labeling
driver via the backend virt driver, as necessary.
Note that the security labeling framework in this release is always
built-in -- it can be made a compile-time option later if desired.
Requirements not yet addressed include:
- Labeling of resources and generally comprehensive labeling management
- Automatic labeling (e.g. for the simple isolation use-case)
- Integration of labeling support into higher-level management tools such
as virt-manager
- Integration with the audit subsystem to help with administration and
debugging
- Domain of interpretation (DOI) checking/translation
- Python bindings
As mentioned, the goal at this stage is to get feedback on the underlying
design: comments welcome!
- James
--
James Morris
<jmorris(a)namei.org>
16 years, 1 month