[libvirt] [PATCH 0/2] host-validate: Be more careful when checking for cgroups
by Andrea Bolognani
Basically, the existing code was built around the assumption that
no cgroup name could appear as part of the name of another cgroup...
Unfortunately, valid cgroup names include 'cpu', 'cpuacct' and 'cpuset'.
This series removes the assumption.
Cheers.
Andrea Bolognani (2):
host-validate: Be more careful when checking for cgroup support
host-validate: Be more careful when checking for cgroup mounts
tools/virt-host-validate-common.c | 67 +++++++++++++++++++++++++++++++--------
1 file changed, 53 insertions(+), 14 deletions(-)
--
2.5.5
8 years, 8 months
[libvirt] [PATCH] docs: fix logfile paragraph
by Boris Fiuczynski
Signed-off-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
---
docs/formatdomain.html.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 957b839..cab628f 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5327,12 +5327,12 @@ qemu-kvm -net nic,model=? /dev/null
</p>
<p>
- Regardless of the<code>type</code>, character devices can
+ Regardless of the <code>type</code>, character devices can
have an optional log file associated with them. This is
expressed via a <code>log</code> sub-element, with a
<code>file</code> attribute. There can also be a <code>append</code>
- attribute which takes teh same values described above.
- <span class="since">1.3.3</span>.
+ attribute which takes the same values described above.
+ <span class="since">Since 1.3.3</span>.
</p>
<pre>
--
2.3.0
8 years, 8 months
[libvirt] [PATCH] network: Remove extraneous ATTRIBUTE_NONNULL
by John Ferlan
Commit id '3992ff14' added the prototype for networkGetActualType
with 1 parameter, but added 2 ATTRIBUTE_NONNULL's (assume from a
cut-n-paste), just remove (2).
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Pushed as trivial and a build breaker for a coverity build.
src/network/bridge_driver.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h
index f0cac5d..ff7f921 100644
--- a/src/network/bridge_driver.h
+++ b/src/network/bridge_driver.h
@@ -48,7 +48,7 @@ int networkGetNetworkAddress(const char *netname, char **netaddr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int networkGetActualType(virDomainNetDefPtr iface)
- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+ ATTRIBUTE_NONNULL(1);
int networkDnsmasqConfContents(virNetworkObjPtr network,
const char *pidfile,
--
2.5.5
8 years, 8 months
[libvirt] Next Generation Config Mgmt + Libvirt
by James
Dear libvir[t] hackers,
## Intro
I'd like to tell you about a project I'm working on, how it pertains to
libvirt, and to inspire you about this idea.
I thought I'd first give you some quick background about myself... Skip
to '## Project' if you'd prefer... I'm James, but I go by purpleidea on
a lot of the internet. I've been a happy libvirt user for very many
years, and I'm a huge fan of the project. I'm also a Red Hat engineer.
I remember using libvirt for both lxc and regular vm's. I even remember
being sad when virt-system-service died. I love using both virsh and
virt-manager.
I think libvirt is such a nice approach, I even went out of my way and
hacked on vagrant-libvirt, and Oh-My-Vagrant, since I wanted to use
libvirt instead of virtualbox, even though virtualbox was much more
popular and apparently easier.
## Project
I started a Next Generation Config Mgmt project called "mgmt". Think
declarative management similar to puppet and chef, although my system
is better because:
* it runs in parallel
* is event based
* functions as a distributed system
There's an introductory blog post [2], two other posts [3,4] and a
video:
https://www.youtube.com/watch?v=GVhpPF0j-iE&html5=1
## Why Libvirt?
The reason this is all very relevant to libvirt, is that since we are
event based, a native libvirt "resource" would be a particularly cool
and powerful thing to have in mgmt. This would enable a user to
declaratively manage libvirt resources, *and* work out automatically
how to change and modify the resource when a configuration change
happens.
This is a highly sought after property. I'd like for mgmt+libvirt to be
the first to do this right. Since there haven't been any event based
management systems that this would work with, we'd be pioneers.
## Help
I don't have enough knowledge of the internals or time to drive
creation of this resource. I was hoping one or more of you might be
interested in working on this, and or suggesting the project to others.
I will of course mentor the developers(s) if they so wish, and help as
much as possible. The project is in golang, and so recommendations on
how best to communicate with and receive events from libvirtd in golang
are welcome. I'm currently considering one of the two libvirt golang
bindings that I've found but other ideas are welcome too.
## Thanks
Thank you in advance, and please let me know if you're interested. We
also have an IRC channel: #mgmtconfig if you'd prefer to talk over IRC.
Cheers,
James
@purpleidea
[1] https://ttboj.wordpress.com/?s=vagrant
[2] https://ttboj.wordpress.com/2016/01/18/next-generation-configuratio
n-mgmt/
[3] https://ttboj.wordpress.com/2016/03/14/automatic-edges-in-mgmt/
[4] https://ttboj.wordpress.com/2016/03/30/automatic-grouping-in-mgmt/
8 years, 8 months
[libvirt] [PATCH] util: Create virsecret module adding virSecretGetSecretString
by John Ferlan
Commit id 'fb2bd208' essentially copied the qemuGetSecretString
creating an libxlGetSecretString. Rather than have multiple copies
of the same code, create virsecret.{c,h} files and place the common
function in there.
Usage is from both qemu_command.c and libxl_conf.c
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Not for 1.3.3, but I may as well get it "out there" now...
po/POTFILES.in | 1 +
src/Makefile.am | 1 +
src/libvirt_private.syms | 3 ++
src/libxl/libxl_conf.c | 82 +++-----------------------------
src/qemu/qemu_command.c | 87 ++++------------------------------
src/util/virsecret.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++
src/util/virsecret.h | 35 ++++++++++++++
7 files changed, 174 insertions(+), 155 deletions(-)
create mode 100644 src/util/virsecret.c
create mode 100644 src/util/virsecret.h
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0d7f9f9..e3b8468 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -229,6 +229,7 @@ src/util/virportallocator.c
src/util/virprocess.c
src/util/virrandom.c
src/util/virrotatingfile.c
+src/util/virsecret.c
src/util/virsexpr.c
src/util/virscsi.c
src/util/virsocketaddr.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 1726d06..4783f40 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -156,6 +156,7 @@ UTIL_SOURCES = \
util/virrotatingfile.h util/virrotatingfile.c \
util/virscsi.c util/virscsi.h \
util/virseclabel.c util/virseclabel.h \
+ util/virsecret.c util/virsecret.h \
util/virsexpr.c util/virsexpr.h \
util/virsocketaddr.h util/virsocketaddr.c \
util/virstats.c util/virstats.h \
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 684f06c..fe3d132 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2142,6 +2142,9 @@ virSecurityLabelDefFree;
virSecurityLabelDefNew;
+# util/virsecret.h
+virSecretGetSecretString;
+
# util/virsexpr.h
sexpr2string;
sexpr_append;
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 82ba417..db26511 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -46,7 +46,7 @@
#include "libxl_conf.h"
#include "libxl_utils.h"
#include "virstoragefile.h"
-#include "base64.h"
+#include "virsecret.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -935,76 +935,6 @@ libxlDomainGetEmulatorType(const virDomainDef *def)
return ret;
}
-static char *
-libxlGetSecretString(virConnectPtr conn,
- const char *scheme,
- bool encoded,
- virStorageAuthDefPtr authdef,
- virSecretUsageType secretUsageType)
-{
- size_t secret_size;
- virSecretPtr sec = NULL;
- char *secret = NULL;
- char uuidStr[VIR_UUID_STRING_BUFLEN];
-
- /* look up secret */
- switch (authdef->secretType) {
- case VIR_STORAGE_SECRET_TYPE_UUID:
- sec = virSecretLookupByUUID(conn, authdef->secret.uuid);
- virUUIDFormat(authdef->secret.uuid, uuidStr);
- break;
- case VIR_STORAGE_SECRET_TYPE_USAGE:
- sec = virSecretLookupByUsage(conn, secretUsageType,
- authdef->secret.usage);
- break;
- }
-
- if (!sec) {
- if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
- virReportError(VIR_ERR_NO_SECRET,
- _("%s no secret matches uuid '%s'"),
- scheme, uuidStr);
- } else {
- virReportError(VIR_ERR_NO_SECRET,
- _("%s no secret matches usage value '%s'"),
- scheme, authdef->secret.usage);
- }
- goto cleanup;
- }
-
- secret = (char *)conn->secretDriver->secretGetValue(sec, &secret_size, 0,
- VIR_SECRET_GET_VALUE_INTERNAL_CALL);
- if (!secret) {
- if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("could not get value of the secret for "
- "username '%s' using uuid '%s'"),
- authdef->username, uuidStr);
- } else {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("could not get value of the secret for "
- "username '%s' using usage value '%s'"),
- authdef->username, authdef->secret.usage);
- }
- goto cleanup;
- }
-
- if (encoded) {
- char *base64 = NULL;
-
- base64_encode_alloc(secret, secret_size, &base64);
- VIR_FREE(secret);
- if (!base64) {
- virReportOOMError();
- goto cleanup;
- }
- secret = base64;
- }
-
- cleanup:
- virObjectUnref(sec);
- return secret;
-}
static char *
libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src,
@@ -1100,11 +1030,11 @@ libxlMakeNetworkDiskSrc(virStorageSourcePtr src, char **srcstr)
if (!(conn = virConnectOpen("xen:///system")))
goto cleanup;
- if (!(secret = libxlGetSecretString(conn,
- protocol,
- true,
- src->auth,
- VIR_SECRET_USAGE_TYPE_CEPH)))
+ if (!(secret = virSecretGetSecretString(conn,
+ protocol,
+ true,
+ src->auth,
+ VIR_SECRET_USAGE_TYPE_CEPH)))
goto cleanup;
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2d0ca97..20a5ea4 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -50,7 +50,7 @@
#include "secret_conf.h"
#include "network/bridge_driver.h"
#include "virnetdevtap.h"
-#include "base64.h"
+#include "virsecret.h"
#include "device_conf.h"
#include "virstoragefile.h"
#include "virtpm.h"
@@ -487,77 +487,6 @@ qemuSafeSerialParamValue(const char *value)
return 0;
}
-static char *
-qemuGetSecretString(virConnectPtr conn,
- const char *scheme,
- bool encoded,
- virStorageAuthDefPtr authdef,
- virSecretUsageType secretUsageType)
-{
- size_t secret_size;
- virSecretPtr sec = NULL;
- char *secret = NULL;
- char uuidStr[VIR_UUID_STRING_BUFLEN];
-
- /* look up secret */
- switch (authdef->secretType) {
- case VIR_STORAGE_SECRET_TYPE_UUID:
- sec = virSecretLookupByUUID(conn, authdef->secret.uuid);
- virUUIDFormat(authdef->secret.uuid, uuidStr);
- break;
- case VIR_STORAGE_SECRET_TYPE_USAGE:
- sec = virSecretLookupByUsage(conn, secretUsageType,
- authdef->secret.usage);
- break;
- }
-
- if (!sec) {
- if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
- virReportError(VIR_ERR_NO_SECRET,
- _("%s no secret matches uuid '%s'"),
- scheme, uuidStr);
- } else {
- virReportError(VIR_ERR_NO_SECRET,
- _("%s no secret matches usage value '%s'"),
- scheme, authdef->secret.usage);
- }
- goto cleanup;
- }
-
- secret = (char *)conn->secretDriver->secretGetValue(sec, &secret_size, 0,
- VIR_SECRET_GET_VALUE_INTERNAL_CALL);
- if (!secret) {
- if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("could not get value of the secret for "
- "username '%s' using uuid '%s'"),
- authdef->username, uuidStr);
- } else {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("could not get value of the secret for "
- "username '%s' using usage value '%s'"),
- authdef->username, authdef->secret.usage);
- }
- goto cleanup;
- }
-
- if (encoded) {
- char *base64 = NULL;
-
- base64_encode_alloc(secret, secret_size, &base64);
- VIR_FREE(secret);
- if (!base64) {
- virReportOOMError();
- goto cleanup;
- }
- secret = base64;
- }
-
- cleanup:
- virObjectUnref(sec);
- return secret;
-}
-
static int
qemuNetworkDriveGetPort(int protocol,
@@ -868,11 +797,11 @@ qemuGetDriveSourceString(virStorageSourcePtr src,
secretType = VIR_SECRET_USAGE_TYPE_CEPH;
}
- if (!(secret = qemuGetSecretString(conn,
- protocol,
- encode,
- src->auth,
- secretType)))
+ if (!(secret = virSecretGetSecretString(conn,
+ protocol,
+ encode,
+ src->auth,
+ secretType)))
goto cleanup;
}
}
@@ -4458,8 +4387,8 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virConnectPtr conn,
int secretType = VIR_SECRET_USAGE_TYPE_ISCSI;
username = iscsisrc->auth->username;
- if (!(secret = qemuGetSecretString(conn, protocol, encode,
- iscsisrc->auth, secretType)))
+ if (!(secret = virSecretGetSecretString(conn, protocol, encode,
+ iscsisrc->auth, secretType)))
goto cleanup;
}
diff --git a/src/util/virsecret.c b/src/util/virsecret.c
new file mode 100644
index 0000000..07c052a
--- /dev/null
+++ b/src/util/virsecret.c
@@ -0,0 +1,120 @@
+/*
+ * virsecret.c: secret related utility functions
+ *
+ * Copyright (C) 2016 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <config.h>
+
+#include "virsecret.h"
+#include "viralloc.h"
+#include "virerror.h"
+#include "virlog.h"
+#include "virobject.h"
+#include "viruuid.h"
+#include "base64.h"
+#include "datatypes.h"
+
+#define VIR_FROM_THIS VIR_FROM_SECRET
+
+VIR_LOG_INIT("util.secret");
+
+
+/* virSecretGetSecretString:
+ * @conn: Pointer to the connection driver to make secret driver call
+ * @scheme: Unique enough string for error message to help determine cause
+ * @encoded: Whether the returned secret needs to be base64 encoded
+ * @authdef: Pointer to the disk storage authentication
+ * @secretUsageType: Type of secret usage for authdef lookup
+ *
+ * Lookup the secret for the authdef usage type and return it either as
+ * raw text or encoded based on the caller's need.
+ *
+ * Returns a pointer to memory that needs to be cleared and free'd after
+ * usage or NULL on error.
+ */
+char *
+virSecretGetSecretString(virConnectPtr conn,
+ const char *scheme,
+ bool encoded,
+ virStorageAuthDefPtr authdef,
+ virSecretUsageType secretUsageType)
+{
+ size_t secret_size;
+ virSecretPtr sec = NULL;
+ char *secret = NULL;
+ char uuidStr[VIR_UUID_STRING_BUFLEN];
+
+ /* look up secret */
+ switch (authdef->secretType) {
+ case VIR_STORAGE_SECRET_TYPE_UUID:
+ sec = virSecretLookupByUUID(conn, authdef->secret.uuid);
+ virUUIDFormat(authdef->secret.uuid, uuidStr);
+ break;
+ case VIR_STORAGE_SECRET_TYPE_USAGE:
+ sec = virSecretLookupByUsage(conn, secretUsageType,
+ authdef->secret.usage);
+ break;
+ }
+
+ if (!sec) {
+ if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
+ virReportError(VIR_ERR_NO_SECRET,
+ _("%s no secret matches uuid '%s'"),
+ scheme, uuidStr);
+ } else {
+ virReportError(VIR_ERR_NO_SECRET,
+ _("%s no secret matches usage value '%s'"),
+ scheme, authdef->secret.usage);
+ }
+ goto cleanup;
+ }
+
+ secret = (char *)conn->secretDriver->secretGetValue(sec, &secret_size, 0,
+ VIR_SECRET_GET_VALUE_INTERNAL_CALL);
+ if (!secret) {
+ if (authdef->secretType == VIR_STORAGE_SECRET_TYPE_UUID) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("could not get value of the secret for "
+ "username '%s' using uuid '%s'"),
+ authdef->username, uuidStr);
+ } else {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("could not get value of the secret for "
+ "username '%s' using usage value '%s'"),
+ authdef->username, authdef->secret.usage);
+ }
+ goto cleanup;
+ }
+
+ if (encoded) {
+ char *base64 = NULL;
+
+ base64_encode_alloc(secret, secret_size, &base64);
+ VIR_FREE(secret);
+ if (!base64) {
+ virReportOOMError();
+ goto cleanup;
+ }
+ secret = base64;
+ }
+
+ cleanup:
+ virObjectUnref(sec);
+ return secret;
+}
diff --git a/src/util/virsecret.h b/src/util/virsecret.h
new file mode 100644
index 0000000..8ef0629
--- /dev/null
+++ b/src/util/virsecret.h
@@ -0,0 +1,35 @@
+/*
+ * virsecret.h: secret related utility functions
+ *
+ * Copyright (C) 2016 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __VIR_SECRET_H__
+# define __VIR_SECRET_H__
+
+# include "internal.h"
+# include "virstoragefile.h"
+
+char *virSecretGetSecretString(virConnectPtr conn,
+ const char *scheme,
+ bool encoded,
+ virStorageAuthDefPtr authdef,
+ virSecretUsageType secretUsageType)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
+ ATTRIBUTE_RETURN_CHECK;
+#endif /* __VIR_SECRET_H__ */
--
2.5.5
8 years, 8 months
[libvirt] [PATCH for 1.3.3 0/6] Fix a mis-merge
by John Ferlan
Details in each patch...
Depending on whether I get a review before I close my eyes for the
night I can push or if reviewed after than and before a release is
made - I'm sure someone else can grab and push too...
John Ferlan (6):
qemu: Fix mis-merge of qemuBuildSmartcardCommandLine
qemu: Fix mis-merge of qemuBuildSerialCommandLine
qemu: Fix mis-merge of qemuBuildParallelsCommandLine
qemu: Fix mis-merge of qemuBuildChannelsCommandLine
qemu: Fix mis-merge of qemuBuildConsoleCommandLine
qemu: Fix mis-merge of qemuBuildRedirdevCommandLine
src/qemu/qemu_command.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
--
2.5.5
8 years, 8 months
[libvirt] Host device assignment driver name vfio/ kvm
by Moshe Levi
Hi,
I was testing Host device assignment in OpenStack environment where the driver name is vfio or kvm.
My setup is as follow:
1. Fedora 21
2. Libvirt 1.3.0 which I compiled
3. OpenStack master
I have also other setups with older Libvirt version and the same OpenStack environment.
I notice that on my fedora environment the driver name is vfio were in my old environment the driver name is kvm.
According to Libvirt documentation default is "vfio" on systems where the VFIO driver is available and loaded, see [1]
I remove the vfio modules by removing vfio, vfio_iommu_type1, vfio_pci but when I boot a vm the drive name is vfio
How can change the driver name to be kvm?
Another thing that I encounter is an error when suspending VM (in OpenStack environment) when the driver name is vfio.
In such case I am getting the following error from Libvirt:
2016-03-28 11:42:59.527 1966 ERROR oslo_messaging.rpc.dispatcher File "/usr/lib64/python2.7/site-packages/libvirt.py", line 560, in attachDeviceFlags
2016-03-28 11:42:59.527 1966 ERROR oslo_messaging.rpc.dispatcher if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', dom=self)
2016-03-28 11:42:59.527 1966 ERROR oslo_messaging.rpc.dispatcher libvirtError: internal error: unable to execute QEMU command 'device_add': Device initialization failed.
I would appreciate for some pointers on what can cause this issue.
[1] https://libvirt.org/formatdomain.html#elementsHostDev
8 years, 8 months
[libvirt] [PATCH 0/2] Adjust order of calls during qemuDomainRemoveHostDevice
by John Ferlan
While reviewing patch:
http://www.redhat.com/archives/libvir-list/2016-March/msg00194.html
I noted that the order of operations during the code path was slightly
different and could cause issues if the reattachment code was called
first. It would seem that resetting the hostdev label and cgroup prior
to reattaching the device to the host would be a better corollary to
the attachment code path which detaches the devices from the host, then
sets the cgroup, then sets the hostdev label.
John Ferlan (2):
qemu: Restore label before reattach device to host
qemu: Tear down the cgroup before reattach device to host
src/qemu/qemu_hotplug.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
--
2.5.5
8 years, 8 months
[libvirt] [PATCH for 1.3.3 0/5] Fix parsing our own XMLs
by Martin Kletzander
Laine found out that he can't do 'virsh nodedev-detach pci_dev'
because of some strange error message. That was caused by my commit,
but also by all the previous ones that skipped adding tests and
parsing of new functions. In order for this to work in 1.3.3, we need
either a) only the first patch or b) all of them. I specifically
created the first one so that it has enough in itself to fix the
problem and we don't need to push more and more patches into the
release. We can push the rest after release. If someone wants to
have all in for 1.3.3, well, I hope I added enough tests for that ;)
Martin Kletzander (5):
nodedev: Fix parsing of generated XMLs
Change virPCIDeviceAddress to virDevicePCIAddress
Move capability formatting together
schemas: Update nodedev schema to match reality
conf: Parse more of our nodedev XML
docs/schemas/nodedev.rng | 29 +++--
src/conf/device_conf.h | 11 +-
src/conf/node_device_conf.c | 121 ++++++++++++++++++---
src/conf/node_device_conf.h | 6 +-
src/libvirt_private.syms | 10 +-
src/network/bridge_driver.c | 4 +-
src/node_device/node_device_linux_sysfs.c | 6 +-
src/util/virhostdev.c | 12 +-
src/util/virnetdev.c | 4 +-
src/util/virnetdev.h | 2 +-
src/util/virpci.c | 80 +++++++-------
src/util/virpci.h | 29 ++---
.../pci_0000_00_1c_0_header_type.xml | 2 +-
tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml | 23 ++++
.../pci_0000_02_10_7_sriov_pf_vfs_all.xml | 29 +++++
...i_0000_02_10_7_sriov_pf_vfs_all_header_type.xml | 30 +++++
.../pci_0000_02_10_7_sriov_vfs.xml | 26 +++++
.../pci_0000_02_10_7_sriov_zero_vfs_max_count.xml | 21 ++++
tests/nodedevxml2xmltest.c | 5 +
19 files changed, 333 insertions(+), 117 deletions(-)
create mode 100644 tests/nodedevschemadata/pci_0000_02_10_7_sriov.xml
create mode 100644 tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml
create mode 100644 tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml
create mode 100644 tests/nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml
create mode 100644 tests/nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml
--
2.8.0
8 years, 8 months