[libvirt] [PATCH] virNetworkDefUpdateIPDHCPHost: Don't crash when updating network
by Michal Privoznik
https://bugzilla.redhat.com/show_bug.cgi?id=1182486
When updating a network and adding new ip-dhcp-host entry, the deamon
may crash. The problem is, we iterate over existing <host/> entries
trying to compare MAC addresses to see if there's already an existing
rule. However, not all entries are required to have MAC address. For
instance, the following is perfectly valid entry:
<host id='00:04:58:fd:e4:15:1b:09:4c:0e:09:af:e4:d3:8c:b8:ca:1e'
name='redhatipv6.redhat.com' ip='2001:db8:ca2:2::119'/>
When the checking loop iterates over this, the entry's MAC address is
accessed directly. Well, the fix is obvious - check if the address is
defined before trying to compare it.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/conf/network_conf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 26fe18d..3b719de 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -3601,7 +3601,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
/* log error if an entry with same name/address/ip already exists */
for (i = 0; i < ipdef->nhosts; i++) {
- if ((host.mac &&
+ if ((host.mac && ipdef->hosts[i].mac &&
!virMacAddrCompare(host.mac, ipdef->hosts[i].mac)) ||
(host.name &&
STREQ_NULLABLE(host.name, ipdef->hosts[i].name)) ||
--
2.0.5
9 years, 10 months
[libvirt] [python PATCH] build: make it easier to backport event ids
by Eric Blake
In some cases, it is very easy for downstream distros to backport
enum values without requiring a .so bump. Keying the conditional
code off of the upstream version where the enum value was added
is not ideal, because downstream then has to patch that the feature
is available in their build that still reports an earlier version
number. For example, if RHEL 7 backports events from 1.2.11 into
a build based on 1.2.8, building the python bindings would warn:
libvirt-override.c: In function ‘libvirt_virConnectDomainEventRegisterAny’:
libvirt-override.c:6653:5: warning: enumeration value ‘VIR_DOMAIN_EVENT_ID_TUNABLE’ not handled in switch [-Wswitch]
switch ((virDomainEventID) eventID) {
^
libvirt-override.c:6653:5: warning: enumeration value ‘VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE’ not handled in switch [-Wswitch]
The solution is simple - use feature-based probes instead of
version probes. Since we already scrape the XML API document of
whatever libvirt build we are binding, and that XML already
documents any downstream enum additions, we can use those as the
features for gating conditional compilation.
* generator.py (enum): Track event id names.
(buildStubs): Output define wrappers for events.
* libvirt-override.c
(libvirt_virConnectDomainEventBalloonChangeCallback)
(libvirt_virConnectDomainEventPMSuspendDiskCallback)
(libvirt_virConnectDomainEventDeviceRemovedCallback)
(libvirt_virConnectDomainEventTunableCallback)
(libvirt_virConnectDomainEventAgentLifecycleCallback)
(libvirt_virConnectDomainEventRegisterAny): Use them.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
I mentioned this idea on the list a while back, and finally
got time to code it up in a much nicer way than my initial
attempt that would have polluted libvirt.h proper.
https://www.redhat.com/archives/libvir-list/2014-October/msg00186.html
I'm relatively weak at python, and welcome to suggestions on how
to avoid the long line in generator.py (maybe a regex match on
VIR_.*_EVENT_ID_, but what's the canonical way to write that in
python?)
generator.py | 11 +++++++++--
libvirt-override.c | 46 +++++++++++++++++++++++-----------------------
2 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/generator.py b/generator.py
index cf044c9..4fd6d55 100755
--- a/generator.py
+++ b/generator.py
@@ -9,6 +9,7 @@ qemu_functions = {}
enums = {} # { enumType: { enumConstant: enumValue } }
lxc_enums = {} # { enumType: { enumConstant: enumValue } }
qemu_enums = {} # { enumType: { enumConstant: enumValue } }
+event_ids = []
import os
import sys
@@ -219,6 +220,8 @@ def lxc_function(name, desc, ret, args, file, module, cond):
def enum(type, name, value):
if type not in enums:
enums[type] = {}
+ if name.startswith('VIR_DOMAIN_EVENT_ID_') or name.startswith('VIR_NETWORK_EVENT_ID_'):
+ event_ids.append(name)
if value == 'VIR_TYPED_PARAM_INT':
value = 1
elif value == 'VIR_TYPED_PARAM_UINT':
@@ -910,10 +913,10 @@ def buildStubs(module, api_xml):
wrapper_file = "build/%s.c" % module
include = open(header_file, "w")
- include.write("/* Generated */\n\n")
+ include.write("/* Generated by generator.py */\n\n")
export = open(export_file, "w")
- export.write("/* Generated */\n\n")
+ export.write("/* Generated by generator.py */\n\n")
wrapper = open(wrapper_file, "w")
wrapper.write("/* Generated by generator.py */\n\n")
@@ -943,6 +946,10 @@ def buildStubs(module, api_xml):
# Write C pointer conversion functions.
for classname in primary_classes:
print_c_pointer(classname, wrapper, export, include)
+ # Write define wrappers around event id enums
+ include.write("\n")
+ for event_id in event_ids:
+ include.write("#define %s %s\n" % (event_id, event_id))
include.close()
export.close()
diff --git a/libvirt-override.c b/libvirt-override.c
index e51c44d..88cb527 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -4,7 +4,7 @@
* entry points where an automatically generated stub is
* unpractical
*
- * Copyright (C) 2005, 2007-2014 Red Hat, Inc.
+ * Copyright (C) 2005, 2007-2015 Red Hat, Inc.
*
* Daniel Veillard <veillard(a)redhat.com>
*/
@@ -6346,7 +6346,7 @@ libvirt_virConnectDomainEventPMSuspendCallback(virConnectPtr conn ATTRIBUTE_UNUS
}
-#if LIBVIR_CHECK_VERSION(0, 10, 0)
+#ifdef VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE
static int
libvirt_virConnectDomainEventBalloonChangeCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
@@ -6398,9 +6398,9 @@ libvirt_virConnectDomainEventBalloonChangeCallback(virConnectPtr conn ATTRIBUTE_
LIBVIRT_RELEASE_THREAD_STATE;
return ret;
}
-#endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */
+#endif /* VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE */
-#if LIBVIR_CHECK_VERSION(1, 0, 0)
+#ifdef VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK
static int
libvirt_virConnectDomainEventPMSuspendDiskCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
@@ -6452,9 +6452,9 @@ libvirt_virConnectDomainEventPMSuspendDiskCallback(virConnectPtr conn ATTRIBUTE_
LIBVIRT_RELEASE_THREAD_STATE;
return ret;
}
-#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */
+#endif /* VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK */
-#if LIBVIR_CHECK_VERSION(1, 1, 1)
+#ifdef VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED
static int
libvirt_virConnectDomainEventDeviceRemovedCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
@@ -6504,9 +6504,9 @@ libvirt_virConnectDomainEventDeviceRemovedCallback(virConnectPtr conn ATTRIBUTE_
LIBVIRT_RELEASE_THREAD_STATE;
return ret;
}
-#endif /* LIBVIR_CHECK_VERSION(1, 1, 1) */
+#endif /* VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED */
-#if LIBVIR_CHECK_VERSION(1, 2, 9)
+#ifdef VIR_DOMAIN_EVENT_ID_TUNABLE
static int
libvirt_virConnectDomainEventTunableCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
@@ -6564,9 +6564,9 @@ libvirt_virConnectDomainEventTunableCallback(virConnectPtr conn ATTRIBUTE_UNUSED
return ret;
}
-#endif /* LIBVIR_CHECK_VERSION(1, 2, 9) */
+#endif /* VIR_DOMAIN_EVENT_ID_TUNABLE */
-#if LIBVIR_CHECK_VERSION(1, 2, 11)
+#ifdef VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE
static int
libvirt_virConnectDomainEventAgentLifecycleCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
@@ -6618,7 +6618,7 @@ libvirt_virConnectDomainEventAgentLifecycleCallback(virConnectPtr conn ATTRIBUTE
return ret;
}
-#endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */
+#endif /* VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE */
static PyObject *
@@ -6676,9 +6676,9 @@ libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self,
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventGenericCallback);
break;
case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
-#if LIBVIR_CHECK_VERSION(1, 2, 6)
+#ifdef VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2
case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2:
-#endif /* LIBVIR_CHECK_VERSION(1, 2, 6) */
+#endif /* VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2 */
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventBlockJobCallback);
break;
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
@@ -6693,31 +6693,31 @@ libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self,
case VIR_DOMAIN_EVENT_ID_PMSUSPEND:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventPMSuspendCallback);
break;
-#if LIBVIR_CHECK_VERSION(0, 10, 0)
+#ifdef VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE
case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventBalloonChangeCallback);
break;
-#endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */
-#if LIBVIR_CHECK_VERSION(1, 0, 0)
+#endif /* VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE */
+#ifdef VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK
case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventPMSuspendDiskCallback);
break;
-#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */
-#if LIBVIR_CHECK_VERSION(1, 1, 1)
+#endif /* VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK */
+#ifdef VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED
case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventDeviceRemovedCallback);
break;
-#endif /* LIBVIR_CHECK_VERSION(1, 1, 1) */
-#if LIBVIR_CHECK_VERSION(1, 2, 9)
+#endif /* VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED */
+#ifdef VIR_DOMAIN_EVENT_ID_TUNABLE
case VIR_DOMAIN_EVENT_ID_TUNABLE:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventTunableCallback);
break;
-#endif /* LIBVIR_CHECK_VERSION(1, 2, 9) */
-#if LIBVIR_CHECK_VERSION(1, 2, 11)
+#endif /* VIR_DOMAIN_EVENT_ID_TUNABLE */
+#ifdef VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE
case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE:
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventAgentLifecycleCallback);
break;
-#endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */
+#endif /* VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE */
case VIR_DOMAIN_EVENT_ID_LAST:
break;
}
--
2.1.0
9 years, 10 months
[libvirt] [PATCH] lxc: trivially support DomainHasManagedSaveImage
by Ján Tomko
Return 0 instead of ERR_NO_SUPPORT to avoid spamming daemon logs
when 'virsh dominfo' is run.
https://bugzilla.redhat.com/show_bug.cgi?id=1095637
---
src/lxc/lxc_driver.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 07ddce3..b5aa1cc 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -5717,6 +5717,29 @@ lxcNodeAllocPages(virConnectPtr conn,
}
+static int
+lxcDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
+{
+ virDomainObjPtr vm = NULL;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (!(vm = lxcDomObjFromDomain(dom)))
+ return ret;
+
+ if (virDomainHasManagedSaveImageEnsureACL(dom->conn, vm->def) < 0)
+ goto cleanup;
+
+ ret = 0;
+
+ cleanup:
+ if (vm)
+ virObjectUnlock(vm);
+ return ret;
+}
+
+
/* Function Tables */
static virHypervisorDriver lxcDriver = {
.no = VIR_DRV_LXC,
@@ -5810,6 +5833,7 @@ static virHypervisorDriver lxcDriver = {
.domainLxcOpenNamespace = lxcDomainLxcOpenNamespace, /* 1.0.2 */
.nodeGetFreePages = lxcNodeGetFreePages, /* 1.2.6 */
.nodeAllocPages = lxcNodeAllocPages, /* 1.2.9 */
+ .domainHasManagedSaveImage = lxcDomainHasManagedSaveImage, /* 1.2.12 */
};
static virStateDriver lxcStateDriver = {
--
2.0.4
9 years, 10 months
[libvirt] [PATCH] qemu: forget free priv->origname when get fail in qemuMigrationPrepareAny
by Luyao Huang
https://bugzilla.redhat.com/show_bug.cgi?id=1181182
When we meet error in qemuMigrationPrepareAny and goto
cleanup with rc < 0, we forget clear the priv->origname and this
will make this vm migrate fail next time because leave a wrong
origname in priv, and will Generate a wrong cookie when do
migrate next time.
This patch will make priv->origname is NULL when migrate fail
in target host.
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
src/qemu/qemu_migration.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 77e0b35..a282c43 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -3104,6 +3104,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
if (ret < 0 && priv) {
/* priv is set right after vm is added to the list of domains
* and there is no 'goto cleanup;' in the middle of those */
+ VIR_FREE(priv->origname);
virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
priv->nbdPort = 0;
qemuDomainRemoveInactive(driver, vm);
--
1.8.3.1
9 years, 10 months
[libvirt] [PATCH] qemu: snapshot: inactive external snapshot can't work after libvirtd restart
by Shanzhi Yu
When create inactive external snapshot, after update disk definitions,
virDomainSaveConfig is needed, if not after restart libvirtd the new snapshot
file definitions in xml will be lost.
Reproduce steps:
1. prepare a shut off guest
$ virsh domstate rhel7 && virsh domblklist rhel7
shut off
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/rhel7.img
2. create external disk snapshot
$ virsh snapshot-create rhel7 --disk-only && virsh domblklist rhel7
Domain snapshot 1417882967 created
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/rhel7.1417882967
3. restart libvirtd then check guest source file
$ service libvirtd restart && virsh domblklist rhel7
Redirecting to /bin/systemctl restart libvirtd.service
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/rhel7.img
This was first reported by Eric Blake
http://www.redhat.com/archives/libvir-list/2014-December/msg00369.html
Signed-off-by: Shanzhi Yu <shyu(a)redhat.com>
---
src/qemu/qemu_driver.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 9152cf5..9f8ea0a 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12847,6 +12847,9 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
goto cleanup;
}
defdisk->src->format = snapdisk->src->format;
+
+ if (virDomainSaveConfig(cfg->configDir, vm->def) < 0)
+ goto cleanup;
}
}
--
2.1.0
9 years, 10 months
[libvirt] Plans for next release
by Daniel Veillard
It's start to think pushing a new release. Last one was mid-december
so we ought to push one this month, I will be travelling the last week
and since February is short I suppose pushing the release a bit early
is not a problem. We have around 180 commits already, and I would like
to push for 1.2.12 around Monday 26, so possibly entering freeze Tuesday
or Wednesday next week.
If this plan is a problem, please raise your concerns,
thanks,
Daniel
P.S.: I will be at FOSDEM at the end of the month
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
9 years, 10 months
[libvirt] [PATCH V5 0/3] Parser for xen-xl config format
by Jim Fehlig
V5 of xen-xl parser. V4 was close
https://www.redhat.com/archives/libvir-list/2015-January/msg00429.html
but the tests did not exersice the spice parsing/formatting code. It is
now fixed in V5, along with addressing a few V4 comments from eblake.
Jim Fehlig (1):
Introduce support for parsing/formatting Xen xl config format
Kiarie Kahurani (2):
tests: Tests for the xen-xl parser
libxl: Add support for parsing/formating Xen XL config
configure.ac | 3 +
po/POTFILES.in | 1 +
src/Makefile.am | 11 +
src/libvirt_xenxlconfig.syms | 12 +
src/libxl/libxl_driver.c | 32 ++-
src/xenconfig/xen_common.c | 3 +-
src/xenconfig/xen_xl.c | 515 +++++++++++++++++++++++++++++++++++
src/xenconfig/xen_xl.h | 35 +++
tests/Makefile.am | 11 +
tests/testutilsxen.c | 50 ++++
tests/testutilsxen.h | 9 +-
tests/xlconfigdata/test-new-disk.cfg | 26 ++
tests/xlconfigdata/test-new-disk.xml | 51 ++++
tests/xlconfigdata/test-spice.cfg | 31 +++
tests/xlconfigdata/test-spice.xml | 46 ++++
tests/xlconfigtest.c | 225 +++++++++++++++
tools/virsh.pod | 8 +-
17 files changed, 1055 insertions(+), 14 deletions(-)
create mode 100644 src/libvirt_xenxlconfig.syms
create mode 100644 src/xenconfig/xen_xl.c
create mode 100644 src/xenconfig/xen_xl.h
create mode 100644 tests/xlconfigdata/test-new-disk.cfg
create mode 100644 tests/xlconfigdata/test-new-disk.xml
create mode 100644 tests/xlconfigdata/test-spice.cfg
create mode 100644 tests/xlconfigdata/test-spice.xml
create mode 100644 tests/xlconfigtest.c
--
1.8.4.5
9 years, 10 months
[libvirt] Attempting to pivot disk with incomplete mirror results in hang
by Scott Sullivan
I have what appears to be a bug when pivoting a disk during a block copy that is not yet 100% finished, resulting in the pivot command hanging. I have verified this problem on libvirt 1.2.10.
Here's what Im seeing (transient guest):
1.) Start the block copy:
[root@host ~]# virsh blockcopy f20-SPICE vda /dev/sdc --format=raw --blockdev
Block Copy started
[root@host ~]#
2.) Query status to see it works/is started
[root@host ~]# virsh blockjob --info f20-SPICE vda
Block Copy: [ 1 %]
[root@host ~]#
3.) Attempt the pivot before mirror reaches 100% (this makes cmd hang)
[root@test-parent-kvm ~]# virsh blockjob f20-SPICE vda --pivot
^^^ cmd is now hanging
-------------------------------------------------------------
When its hanging, I see this in /var/log/libvirt/libvirtd.log
19:29:33.376+0000: 1845: error : qemuDomainBlockPivot:15367 : block copy still active: disk 'vda' not ready for pivot yet
19:30:31.000+0000: 1842: warning : qemuDomainObjBeginJobInternal:1376 : Cannot start job (query, none) for domain f20-SPICE; current job is (modify, none) owned by (1845, 0)
19:30:31.000+0000: 1842: error : qemuDomainObjBeginJobInternal:1381 : Timed out during operation: cannot acquire state change lock
This then makes other commands querying this domain hang as well, such as:
virsh blockjob --info f20-SPICE vda
With this being put into log:
19:30:31.000+0000: 1842: error : qemuDomainObjBeginJobInternal:1381 : Timed out during operation: cannot acquire state change lock
19:34:45.568+0000: 1841: error : virNetSocketReadWire:1571 : End of file while reading data: Input/output error
Is this expected behavior? It would be nice if on step #3 instead of hanging the command returned in an error state saying cannot pivot because the mirror is not yet 100% or similar. I am happy to test later versions or patches as needed.
9 years, 10 months
[libvirt] [PATCH V4 0/3] Parser for xen-xl config format
by Jim Fehlig
It's been a long, twisting road to V4 of the Xen xl parser. V3 [1] was
based on a flex-based parser that was copied from the Xen project and
proved to be a bit challenging to integrate properly with autotools.
But as it turns out, Xen provides an interface to the parser via libxlutil.
I hadn't realized this interface was available for external consumption
since the corresponding header file was never installed. Patch sent to
xen-devel [2] to install the header, but in the meantime need to declare
gthe imported libxlutil functions as extern (see patch 1).
V4 uses libxlutil, which has simplified the series quite a bit and
eliminates the potential of the copied flex parser diverging from
the canonical source in xen.git.
[1] https://www.redhat.com/archives/libvir-list/2014-December/msg00765.html
[2] http://lists.xen.org/archives/html/xen-devel/2015-01/msg00690.html
Jim Fehlig (1):
Introduce support for parsing/formatting Xen xl config format
Kiarie Kahurani (2):
tests: Tests for the xen-xl parser
libxl: Add support for parsing/formating Xen XL config
configure.ac | 3 +
po/POTFILES.in | 1 +
src/Makefile.am | 11 +
src/libvirt_xenxlconfig.syms | 12 +
src/libxl/libxl_driver.c | 32 ++-
src/xenconfig/xen_common.c | 3 +-
src/xenconfig/xen_xl.c | 515 +++++++++++++++++++++++++++++++++++
src/xenconfig/xen_xl.h | 35 +++
tests/Makefile.am | 11 +
tests/testutilsxen.c | 50 ++++
tests/testutilsxen.h | 9 +-
tests/xlconfigdata/test-new-disk.cfg | 26 ++
tests/xlconfigdata/test-new-disk.xml | 51 ++++
tests/xlconfigdata/test-spice.cfg | 32 +++
tests/xlconfigdata/test-spice.xml | 45 +++
tests/xlconfigtest.c | 225 +++++++++++++++
tools/virsh.pod | 8 +-
17 files changed, 1055 insertions(+), 14 deletions(-)
create mode 100644 src/libvirt_xenxlconfig.syms
create mode 100644 src/xenconfig/xen_xl.c
create mode 100644 src/xenconfig/xen_xl.h
create mode 100644 tests/xlconfigdata/test-new-disk.cfg
create mode 100644 tests/xlconfigdata/test-new-disk.xml
create mode 100644 tests/xlconfigdata/test-spice.cfg
create mode 100644 tests/xlconfigdata/test-spice.xml
create mode 100644 tests/xlconfigtest.c
--
1.8.4.5
9 years, 10 months