forked from pool/libvirt
Accepting request 484775 from home:jfehlig:branches:Virtualization
- Update to libvirt 3.2.0 - Many incremental improvements and bug fixes, see http://libvirt.org/news.html - Dropped patches: 67dcb797-virTimeBackOffWait-sleepcap.patch, 85af0b80-qemu-adaptive-montimeout.patch, d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch, 754515b7d-add-virNetlinkDumpCommand.patch, 3ee35d7d6-more-uses-of-SYSCTL_PATH.patch, 5dd607059-add-virNetDevGetName.patch, 00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch - Add Conflicts=xendomains.service to libvirtd service suse-libvirtd-service.patch bsc#1015348 OBS-URL: https://build.opensuse.org/request/show/484775 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=595
This commit is contained in:
parent
f9c1123f5a
commit
f39448844a
@ -1,260 +0,0 @@
|
||||
From 00d28a78b5d1f6eaf79f06ac59e31c568af9da37 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
|
||||
Date: Fri, 3 Mar 2017 14:14:51 +0100
|
||||
Subject: [PATCH 5/5] network: check accept_ra before enabling ipv6 forwarding
|
||||
|
||||
When enabling IPv6 on all interfaces, we may get the host Router
|
||||
Advertisement routes discarded. To avoid this, the user needs to set
|
||||
accept_ra to 2 for the interfaces with such routes.
|
||||
|
||||
See https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
|
||||
on this topic.
|
||||
|
||||
To avoid user mistakenly losing routes on their hosts, check
|
||||
accept_ra values before enabling IPv6 forwarding. If a RA route is
|
||||
detected, but neither the corresponding device nor global accept_ra
|
||||
is set to 2, the network will fail to start.
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/network/bridge_driver.c | 16 +++--
|
||||
src/util/virnetdevip.c | 158 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/util/virnetdevip.h | 1 +
|
||||
4 files changed, 171 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 3b2cb83c4..57acfdbb1 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -2067,6 +2067,7 @@ virNetDevBridgeSetVlanFiltering;
|
||||
virNetDevIPAddrAdd;
|
||||
virNetDevIPAddrDel;
|
||||
virNetDevIPAddrGet;
|
||||
+virNetDevIPCheckIPv6Forwarding;
|
||||
virNetDevIPInfoAddToDev;
|
||||
virNetDevIPInfoClear;
|
||||
virNetDevIPRouteAdd;
|
||||
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
|
||||
index 4d1a44516..a753cd78b 100644
|
||||
--- a/src/network/bridge_driver.c
|
||||
+++ b/src/network/bridge_driver.c
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "virlog.h"
|
||||
#include "virdnsmasq.h"
|
||||
#include "configmake.h"
|
||||
+#include "virnetlink.h"
|
||||
#include "virnetdev.h"
|
||||
#include "virnetdevip.h"
|
||||
#include "virnetdevbridge.h"
|
||||
@@ -2389,11 +2390,16 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
|
||||
}
|
||||
|
||||
/* If forward.type != NONE, turn on global IP forwarding */
|
||||
- if (network->def->forward.type != VIR_NETWORK_FORWARD_NONE &&
|
||||
- networkEnableIPForwarding(v4present, v6present) < 0) {
|
||||
- virReportSystemError(errno, "%s",
|
||||
- _("failed to enable IP forwarding"));
|
||||
- goto err3;
|
||||
+ if (network->def->forward.type != VIR_NETWORK_FORWARD_NONE) {
|
||||
+ if (!virNetDevIPCheckIPv6Forwarding())
|
||||
+ goto err3; /* Precise error message already provided */
|
||||
+
|
||||
+
|
||||
+ if (networkEnableIPForwarding(v4present, v6present) < 0) {
|
||||
+ virReportSystemError(errno, "%s",
|
||||
+ _("failed to enable IP forwarding"));
|
||||
+ goto err3;
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
|
||||
index 42fbba1eb..a4d382427 100644
|
||||
--- a/src/util/virnetdevip.c
|
||||
+++ b/src/util/virnetdevip.c
|
||||
@@ -508,6 +508,158 @@ virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+virNetDevIPGetAcceptRA(const char *ifname)
|
||||
+{
|
||||
+ char *path = NULL;
|
||||
+ char *buf = NULL;
|
||||
+ char *suffix;
|
||||
+ int accept_ra = -1;
|
||||
+
|
||||
+ if (virAsprintf(&path, "/proc/sys/net/ipv6/conf/%s/accept_ra",
|
||||
+ ifname ? ifname : "all") < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ if ((virFileReadAll(path, 512, &buf) < 0) ||
|
||||
+ (virStrToLong_i(buf, &suffix, 10, &accept_ra) < 0))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ cleanup:
|
||||
+ VIR_FREE(path);
|
||||
+ VIR_FREE(buf);
|
||||
+
|
||||
+ return accept_ra;
|
||||
+}
|
||||
+
|
||||
+struct virNetDevIPCheckIPv6ForwardingData {
|
||||
+ bool hasRARoutes;
|
||||
+
|
||||
+ /* Devices with conflicting accept_ra */
|
||||
+ char **devices;
|
||||
+ size_t ndevices;
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+virNetDevIPCheckIPv6ForwardingCallback(const struct nlmsghdr *resp,
|
||||
+ void *opaque)
|
||||
+{
|
||||
+ struct rtmsg *rtmsg = NLMSG_DATA(resp);
|
||||
+ int accept_ra = -1;
|
||||
+ struct rtattr *rta;
|
||||
+ char *ifname = NULL;
|
||||
+ struct virNetDevIPCheckIPv6ForwardingData *data = opaque;
|
||||
+ int ret = 0;
|
||||
+ int len = RTM_PAYLOAD(resp);
|
||||
+ int oif = -1;
|
||||
+
|
||||
+ /* Ignore messages other than route ones */
|
||||
+ if (resp->nlmsg_type != RTM_NEWROUTE)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Extract a few attributes */
|
||||
+ for (rta = RTM_RTA(rtmsg); RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
|
||||
+ switch (rta->rta_type) {
|
||||
+ case RTA_OIF:
|
||||
+ oif = *(int *)RTA_DATA(rta);
|
||||
+
|
||||
+ if (!(ifname = virNetDevGetName(oif)))
|
||||
+ goto error;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* No need to do anything else for non RA routes */
|
||||
+ if (rtmsg->rtm_protocol != RTPROT_RA)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ data->hasRARoutes = true;
|
||||
+
|
||||
+ /* Check the accept_ra value for the interface */
|
||||
+ accept_ra = virNetDevIPGetAcceptRA(ifname);
|
||||
+ VIR_DEBUG("Checking route for device %s, accept_ra: %d", ifname, accept_ra);
|
||||
+
|
||||
+ if (accept_ra != 2 && VIR_APPEND_ELEMENT(data->devices, data->ndevices, ifname) < 0)
|
||||
+ goto error;
|
||||
+
|
||||
+ cleanup:
|
||||
+ VIR_FREE(ifname);
|
||||
+ return ret;
|
||||
+
|
||||
+ error:
|
||||
+ ret = -1;
|
||||
+ goto cleanup;
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+virNetDevIPCheckIPv6Forwarding(void)
|
||||
+{
|
||||
+ struct nl_msg *nlmsg = NULL;
|
||||
+ bool valid = false;
|
||||
+ struct rtgenmsg genmsg;
|
||||
+ size_t i;
|
||||
+ struct virNetDevIPCheckIPv6ForwardingData data = {
|
||||
+ .hasRARoutes = false,
|
||||
+ .devices = NULL,
|
||||
+ .ndevices = 0
|
||||
+ };
|
||||
+
|
||||
+
|
||||
+ /* Prepare the request message */
|
||||
+ if (!(nlmsg = nlmsg_alloc_simple(RTM_GETROUTE,
|
||||
+ NLM_F_REQUEST | NLM_F_DUMP))) {
|
||||
+ virReportOOMError();
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ memset(&genmsg, 0, sizeof(genmsg));
|
||||
+ genmsg.rtgen_family = AF_INET6;
|
||||
+
|
||||
+ if (nlmsg_append(nlmsg, &genmsg, sizeof(genmsg), NLMSG_ALIGNTO) < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("allocated netlink buffer is too small"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ /* Send the request and loop over the responses */
|
||||
+ if (virNetlinkDumpCommand(nlmsg, virNetDevIPCheckIPv6ForwardingCallback,
|
||||
+ 0, 0, NETLINK_ROUTE, 0, &data) < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("Failed to loop over IPv6 routes"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ valid = !data.hasRARoutes || data.ndevices == 0;
|
||||
+
|
||||
+ /* Check the global accept_ra if at least one isn't set on a
|
||||
+ per-device basis */
|
||||
+ if (!valid && data.hasRARoutes) {
|
||||
+ int accept_ra = virNetDevIPGetAcceptRA(NULL);
|
||||
+ valid = accept_ra == 2;
|
||||
+ VIR_DEBUG("Checked global accept_ra: %d", accept_ra);
|
||||
+ }
|
||||
+
|
||||
+ if (!valid) {
|
||||
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
+ for (i = 0; i < data.ndevices; i++) {
|
||||
+ virBufferAdd(&buf, data.devices[i], -1);
|
||||
+ if (i < data.ndevices - 1)
|
||||
+ virBufferAddLit(&buf, ", ");
|
||||
+ }
|
||||
+
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Check the host setup: enabling IPv6 forwarding with "
|
||||
+ "RA routes without accept_ra set to 2 is likely to cause "
|
||||
+ "routes loss. Interfaces to look at: %s"),
|
||||
+ virBufferCurrentContent(&buf));
|
||||
+ virBufferFreeAndReset(&buf);
|
||||
+ }
|
||||
+
|
||||
+ cleanup:
|
||||
+ nlmsg_free(nlmsg);
|
||||
+ for (i = 0; i < data.ndevices; i++)
|
||||
+ VIR_FREE(data.devices[i]);
|
||||
+ return valid;
|
||||
+}
|
||||
|
||||
#else /* defined(__linux__) && defined(HAVE_LIBNL) */
|
||||
|
||||
@@ -655,6 +807,12 @@ virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+bool
|
||||
+virNetDevIPCheckIPv6Forwarding(void)
|
||||
+{
|
||||
+ VIR_WARN("built without libnl: unable to check if IPv6 forwarding can be safely enabled");
|
||||
+ return true;
|
||||
+}
|
||||
|
||||
#endif /* defined(__linux__) && defined(HAVE_LIBNL) */
|
||||
|
||||
diff --git a/src/util/virnetdevip.h b/src/util/virnetdevip.h
|
||||
index b7abdf94d..cc466ca25 100644
|
||||
--- a/src/util/virnetdevip.h
|
||||
+++ b/src/util/virnetdevip.h
|
||||
@@ -83,6 +83,7 @@ int virNetDevIPAddrGet(const char *ifname, virSocketAddrPtr addr)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
||||
int virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
+bool virNetDevIPCheckIPv6Forwarding(void);
|
||||
|
||||
/* virNetDevIPRoute object */
|
||||
void virNetDevIPRouteFree(virNetDevIPRoutePtr def);
|
||||
--
|
||||
2.12.0
|
||||
|
@ -1,46 +0,0 @@
|
||||
From 3ee35d7d6caf0ffa722d60251eabec43c094fb12 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
|
||||
Date: Fri, 3 Mar 2017 14:13:49 +0100
|
||||
Subject: [PATCH 3/5] bridge_driver.c: more uses of SYSCTL_PATH
|
||||
|
||||
Replace a few occurences of /proc/sys by the corresponding macro
|
||||
defined a few lines after: SYSCTL_PATH
|
||||
---
|
||||
src/network/bridge_driver.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
|
||||
index 32c5ab7a7..4d1a44516 100644
|
||||
--- a/src/network/bridge_driver.c
|
||||
+++ b/src/network/bridge_driver.c
|
||||
@@ -85,6 +85,8 @@
|
||||
*/
|
||||
#define VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX (32 * 1024 * 1024)
|
||||
|
||||
+#define SYSCTL_PATH "/proc/sys"
|
||||
+
|
||||
VIR_LOG_INIT("network.bridge_driver");
|
||||
|
||||
static virNetworkDriverStatePtr network_driver;
|
||||
@@ -2092,15 +2094,14 @@ networkEnableIPForwarding(bool enableIPv4, bool enableIPv6)
|
||||
&enabled, sizeof(enabled));
|
||||
#else
|
||||
if (enableIPv4)
|
||||
- ret = virFileWriteStr("/proc/sys/net/ipv4/ip_forward", "1\n", 0);
|
||||
+ ret = virFileWriteStr(SYSCTL_PATH "/net/ipv4/ip_forward", "1\n", 0);
|
||||
if (enableIPv6 && ret == 0)
|
||||
- ret = virFileWriteStr("/proc/sys/net/ipv6/conf/all/forwarding", "1\n", 0);
|
||||
+ ret = virFileWriteStr(SYSCTL_PATH "/net/ipv6/conf/all/forwarding", "1\n", 0);
|
||||
+
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
-#define SYSCTL_PATH "/proc/sys"
|
||||
-
|
||||
static int
|
||||
networkSetIPv6Sysctls(virNetworkObjPtr network)
|
||||
{
|
||||
--
|
||||
2.12.0
|
||||
|
@ -1,70 +0,0 @@
|
||||
From 5dd607059d8a98e04024305ae4afbd038aadbdcd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
|
||||
Date: Wed, 15 Mar 2017 14:46:56 +0100
|
||||
Subject: [PATCH 4/5] util: add virNetDevGetName() function
|
||||
|
||||
Add a function getting the name of a network interface out of its index.
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virnetdev.c | 19 +++++++++++++++++++
|
||||
src/util/virnetdev.h | 2 ++
|
||||
3 files changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index f03925bc1..3b2cb83c4 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -1995,6 +1995,7 @@ virNetDevGetIndex;
|
||||
virNetDevGetLinkInfo;
|
||||
virNetDevGetMAC;
|
||||
virNetDevGetMTU;
|
||||
+virNetDevGetName;
|
||||
virNetDevGetOnline;
|
||||
virNetDevGetPhysicalFunction;
|
||||
virNetDevGetPromiscuous;
|
||||
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
|
||||
index d12324878..91a5274aa 100644
|
||||
--- a/src/util/virnetdev.c
|
||||
+++ b/src/util/virnetdev.c
|
||||
@@ -899,6 +899,25 @@ virNetDevGetRcvAllMulti(const char *ifname,
|
||||
return virNetDevGetIFFlag(ifname, VIR_IFF_ALLMULTI, receive);
|
||||
}
|
||||
|
||||
+char *virNetDevGetName(int ifindex)
|
||||
+{
|
||||
+ char name[IFNAMSIZ];
|
||||
+ char *ifname = NULL;
|
||||
+
|
||||
+ memset(&name, 0, sizeof(name));
|
||||
+
|
||||
+ if (!if_indextoname(ifindex, name)) {
|
||||
+ virReportSystemError(errno,
|
||||
+ _("Failed to convert interface index %d to a name"),
|
||||
+ ifindex);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ ignore_value(VIR_STRDUP(ifname, name));
|
||||
+
|
||||
+ cleanup:
|
||||
+ return ifname;
|
||||
+}
|
||||
|
||||
/**
|
||||
* virNetDevGetIndex:
|
||||
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
|
||||
index 236cf83ef..01e9c5b95 100644
|
||||
--- a/src/util/virnetdev.h
|
||||
+++ b/src/util/virnetdev.h
|
||||
@@ -157,6 +157,8 @@ int virNetDevSetNamespace(const char *ifname, pid_t pidInNs)
|
||||
int virNetDevSetName(const char *ifname, const char *newifname)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
+char *virNetDevGetName(int ifindex)
|
||||
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
|
||||
int virNetDevGetIndex(const char *ifname, int *ifindex)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
--
|
||||
2.12.0
|
||||
|
@ -1,66 +0,0 @@
|
||||
commit 67dcb797ed7f1fbb048aa47006576f424923933b
|
||||
Author: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon Mar 13 11:05:08 2017 +0100
|
||||
|
||||
virTimeBackOffWait: Avoid long periods of sleep
|
||||
|
||||
While connecting to qemu monitor, the first thing we do is wait
|
||||
for it to show up. However, we are doing it with some timeout to
|
||||
avoid indefinite waits (e.g. when qemu doesn't create the monitor
|
||||
socket at all). After beaa447a29 we are using exponential back
|
||||
off timeout meaning, after the first connection attempt we wait
|
||||
1ms, then 2ms, then 4 and so on. This allows us to bring down
|
||||
wait time for small domains where qemu initializes quickly.
|
||||
However, on the other end of this scale are some domains with
|
||||
huge amounts of guest memory. Now imagine that we've gotten up to
|
||||
wait time of 15 seconds. The next one is going to be 30 seconds,
|
||||
and the one after that whole minute. Well, okay - with current
|
||||
code we are not going to wait longer than 30 seconds in total,
|
||||
but this is going to change in the next commit.
|
||||
|
||||
The exponential back off is usable only for first few iterations.
|
||||
Then it needs to be caped (one second was chosen as the limit)
|
||||
and switch to constant wait time.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
|
||||
Index: libvirt-3.1.0/src/util/virtime.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/util/virtime.c
|
||||
+++ libvirt-3.1.0/src/util/virtime.c
|
||||
@@ -390,6 +390,9 @@ virTimeBackOffStart(virTimeBackOffVar *v
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+#define VIR_TIME_BACKOFF_CAP 1000
|
||||
+
|
||||
/**
|
||||
* virTimeBackOffWait
|
||||
* @var: Timeout variable (with type virTimeBackOffVar *).
|
||||
@@ -410,7 +413,9 @@ virTimeBackOffStart(virTimeBackOffVar *v
|
||||
* The while loop that runs the body of the code repeatedly, with an
|
||||
* exponential backoff. It first waits for first milliseconds, then
|
||||
* runs the body, then waits for 2*first ms, then runs the body again.
|
||||
- * Then 4*first ms, and so on.
|
||||
+ * Then 4*first ms, and so on, up until wait time would reach
|
||||
+ * VIR_TIME_BACK_OFF_CAP (whole second). Then it switches to constant
|
||||
+ * waiting time of VIR_TIME_BACK_OFF_CAP.
|
||||
*
|
||||
* When timeout milliseconds is reached, the while loop ends.
|
||||
*
|
||||
@@ -429,8 +434,13 @@ virTimeBackOffWait(virTimeBackOffVar *va
|
||||
if (t > var->limit_t)
|
||||
return 0; /* ends the while loop */
|
||||
|
||||
+ /* Compute next wait time. Cap at VIR_TIME_BACKOFF_CAP
|
||||
+ * to avoid long useless sleeps. */
|
||||
next = var->next;
|
||||
- var->next *= 2;
|
||||
+ if (var->next < VIR_TIME_BACKOFF_CAP)
|
||||
+ var->next *= 2;
|
||||
+ else if (var->next > VIR_TIME_BACKOFF_CAP)
|
||||
+ var->next = VIR_TIME_BACKOFF_CAP;
|
||||
|
||||
/* If sleeping would take us beyond the limit, then shorten the
|
||||
* sleep. This is so we always run the body just before the final
|
@ -1,125 +0,0 @@
|
||||
From 754515b7db6258ab592265b743128353be0cb32b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
|
||||
Date: Fri, 3 Mar 2017 12:22:50 +0100
|
||||
Subject: [PATCH 2/5] util: add virNetlinkDumpCommand()
|
||||
|
||||
virNetlinkCommand() processes only one response message, while some
|
||||
netlink commands, like route dumping, need to process several.
|
||||
Add virNetlinkDumpCommand() as a virNetlinkCommand() sister.
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virnetlink.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/util/virnetlink.h | 9 ++++++++
|
||||
3 files changed, 68 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index b46e85f63..f03925bc1 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -2138,6 +2138,7 @@ virNetDevVPortProfileOpTypeToString;
|
||||
# util/virnetlink.h
|
||||
virNetlinkCommand;
|
||||
virNetlinkDelLink;
|
||||
+virNetlinkDumpCommand;
|
||||
virNetlinkDumpLink;
|
||||
virNetlinkEventAddClient;
|
||||
virNetlinkEventRemoveClient;
|
||||
diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c
|
||||
index be00351db..9bc1f0f2b 100644
|
||||
--- a/src/util/virnetlink.c
|
||||
+++ b/src/util/virnetlink.c
|
||||
@@ -335,6 +335,52 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+int
|
||||
+virNetlinkDumpCommand(struct nl_msg *nl_msg,
|
||||
+ virNetlinkDumpCallback callback,
|
||||
+ uint32_t src_pid, uint32_t dst_pid,
|
||||
+ unsigned int protocol, unsigned int groups,
|
||||
+ void *opaque)
|
||||
+{
|
||||
+ int ret = -1;
|
||||
+ bool end = false;
|
||||
+ int len = 0;
|
||||
+ struct nlmsghdr *resp = NULL;
|
||||
+ struct nlmsghdr *msg = NULL;
|
||||
+
|
||||
+ struct sockaddr_nl nladdr = {
|
||||
+ .nl_family = AF_NETLINK,
|
||||
+ .nl_pid = dst_pid,
|
||||
+ .nl_groups = 0,
|
||||
+ };
|
||||
+ virNetlinkHandle *nlhandle = NULL;
|
||||
+
|
||||
+ if (!(nlhandle = virNetlinkSendRequest(nl_msg, src_pid, nladdr,
|
||||
+ protocol, groups)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ while (!end) {
|
||||
+ len = nl_recv(nlhandle, &nladdr, (unsigned char **)&resp, NULL);
|
||||
+
|
||||
+ for (msg = resp; NLMSG_OK(msg, len); msg = NLMSG_NEXT(msg, len)) {
|
||||
+ if (msg->nlmsg_type == NLMSG_DONE)
|
||||
+ end = true;
|
||||
+
|
||||
+ if (virNetlinkGetErrorCode(msg, len) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ if (callback(msg, opaque) < 0)
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ret = 0;
|
||||
+
|
||||
+ cleanup:
|
||||
+ virNetlinkFree(nlhandle);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* virNetlinkDumpLink:
|
||||
*
|
||||
@@ -1061,6 +1107,18 @@ int virNetlinkCommand(struct nl_msg *nl_msg ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+int
|
||||
+virNetlinkDumpCommand(struct nl_msg *nl_msg ATTRIBUTE_UNUSED,
|
||||
+ virNetlinkDumpCallback callback ATTRIBUTE_UNUSED,
|
||||
+ uint32_t src_pid ATTRIBUTE_UNUSED,
|
||||
+ uint32_t dst_pid ATTRIBUTE_UNUSED,
|
||||
+ unsigned int protocol ATTRIBUTE_UNUSED,
|
||||
+ unsigned int groups ATTRIBUTE_UNUSED,
|
||||
+ void *opaque ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
|
||||
+ return -1;
|
||||
+}
|
||||
|
||||
int
|
||||
virNetlinkDumpLink(const char *ifname ATTRIBUTE_UNUSED,
|
||||
diff --git a/src/util/virnetlink.h b/src/util/virnetlink.h
|
||||
index 11e817c82..088b01343 100644
|
||||
--- a/src/util/virnetlink.h
|
||||
+++ b/src/util/virnetlink.h
|
||||
@@ -52,6 +52,15 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
uint32_t src_pid, uint32_t dst_pid,
|
||||
unsigned int protocol, unsigned int groups);
|
||||
|
||||
+typedef int (*virNetlinkDumpCallback)(const struct nlmsghdr *resp,
|
||||
+ void *data);
|
||||
+
|
||||
+int virNetlinkDumpCommand(struct nl_msg *nl_msg,
|
||||
+ virNetlinkDumpCallback callback,
|
||||
+ uint32_t src_pid, uint32_t dst_pid,
|
||||
+ unsigned int protocol, unsigned int groups,
|
||||
+ void *opaque);
|
||||
+
|
||||
typedef int (*virNetlinkDelLinkFallback)(const char *ifname);
|
||||
|
||||
int virNetlinkDelLink(const char *ifname, virNetlinkDelLinkFallback fallback);
|
||||
--
|
||||
2.12.0
|
||||
|
@ -1,171 +0,0 @@
|
||||
commit 85af0b803cd19a03f71bd01ab4e045552410368f
|
||||
Author: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Sat Mar 11 07:23:42 2017 +0100
|
||||
|
||||
qemu: Adaptive timeout for connecting to monitor
|
||||
|
||||
There were couple of reports on the list (e.g. [1]) that guests
|
||||
with huge amounts of RAM are unable to start because libvirt
|
||||
kills qemu in the initialization phase. The problem is that if
|
||||
guest is configured to use hugepages kernel has to zero them all
|
||||
out before handing over to qemu process. For instance, 402GiB
|
||||
worth of 1GiB pages took around 105 seconds (~3.8GiB/s). Since we
|
||||
do not want to make the timeout for connecting to monitor
|
||||
configurable, we have to teach libvirt to count with this
|
||||
fact. This commit implements "1s per each 1GiB of RAM" approach
|
||||
as suggested here [2].
|
||||
|
||||
1: https://www.redhat.com/archives/libvir-list/2017-March/msg00373.html
|
||||
2: https://www.redhat.com/archives/libvir-list/2017-March/msg00405.html
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
|
||||
Index: libvirt-3.1.0/src/qemu/qemu_capabilities.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu_capabilities.c
|
||||
+++ libvirt-3.1.0/src/qemu/qemu_capabilities.c
|
||||
@@ -4571,7 +4571,7 @@ virQEMUCapsInitQMPCommandRun(virQEMUCaps
|
||||
cmd->vm->pid = cmd->pid;
|
||||
|
||||
if (!(cmd->mon = qemuMonitorOpen(cmd->vm, &cmd->config, true,
|
||||
- &callbacks, NULL)))
|
||||
+ 0, &callbacks, NULL)))
|
||||
goto ignore;
|
||||
|
||||
virObjectLock(cmd->mon);
|
||||
Index: libvirt-3.1.0/src/qemu/qemu_monitor.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu_monitor.c
|
||||
+++ libvirt-3.1.0/src/qemu/qemu_monitor.c
|
||||
@@ -327,11 +327,13 @@ qemuMonitorDispose(void *obj)
|
||||
|
||||
|
||||
static int
|
||||
-qemuMonitorOpenUnix(const char *monitor, pid_t cpid)
|
||||
+qemuMonitorOpenUnix(const char *monitor,
|
||||
+ pid_t cpid,
|
||||
+ unsigned long long timeout)
|
||||
{
|
||||
struct sockaddr_un addr;
|
||||
int monfd;
|
||||
- virTimeBackOffVar timeout;
|
||||
+ virTimeBackOffVar timebackoff;
|
||||
int ret = -1;
|
||||
|
||||
if ((monfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
|
||||
@@ -348,9 +350,9 @@ qemuMonitorOpenUnix(const char *monitor,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- if (virTimeBackOffStart(&timeout, 1, 30*1000 /* ms */) < 0)
|
||||
+ if (virTimeBackOffStart(&timebackoff, 1, timeout * 1000) < 0)
|
||||
goto error;
|
||||
- while (virTimeBackOffWait(&timeout)) {
|
||||
+ while (virTimeBackOffWait(&timebackoff)) {
|
||||
ret = connect(monfd, (struct sockaddr *) &addr, sizeof(addr));
|
||||
|
||||
if (ret == 0)
|
||||
@@ -871,10 +873,30 @@ qemuMonitorOpenInternal(virDomainObjPtr
|
||||
}
|
||||
|
||||
|
||||
+#define QEMU_DEFAULT_MONITOR_WAIT 30
|
||||
+
|
||||
+/**
|
||||
+ * qemuMonitorOpen:
|
||||
+ * @vm: domain object
|
||||
+ * @config: monitor configuration
|
||||
+ * @json: enable JSON on the monitor
|
||||
+ * @timeout: number of seconds to add to default timeout
|
||||
+ * @cb: monitor event handles
|
||||
+ * @opaque: opaque data for @cb
|
||||
+ *
|
||||
+ * Opens the monitor for running qemu. It may happen that it
|
||||
+ * takes some time for qemu to create the monitor socket (e.g.
|
||||
+ * because kernel is zeroing configured hugepages), therefore we
|
||||
+ * wait up to default + timeout seconds for the monitor to show
|
||||
+ * up after which a failure is claimed.
|
||||
+ *
|
||||
+ * Returns monitor object, NULL on error.
|
||||
+ */
|
||||
qemuMonitorPtr
|
||||
qemuMonitorOpen(virDomainObjPtr vm,
|
||||
virDomainChrSourceDefPtr config,
|
||||
bool json,
|
||||
+ unsigned long long timeout,
|
||||
qemuMonitorCallbacksPtr cb,
|
||||
void *opaque)
|
||||
{
|
||||
@@ -882,10 +904,14 @@ qemuMonitorOpen(virDomainObjPtr vm,
|
||||
bool hasSendFD = false;
|
||||
qemuMonitorPtr ret;
|
||||
|
||||
+ timeout += QEMU_DEFAULT_MONITOR_WAIT;
|
||||
+
|
||||
switch (config->type) {
|
||||
case VIR_DOMAIN_CHR_TYPE_UNIX:
|
||||
hasSendFD = true;
|
||||
- if ((fd = qemuMonitorOpenUnix(config->data.nix.path, vm ? vm->pid : 0)) < 0)
|
||||
+ if ((fd = qemuMonitorOpenUnix(config->data.nix.path,
|
||||
+ vm ? vm->pid : 0,
|
||||
+ timeout)) < 0)
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
Index: libvirt-3.1.0/src/qemu/qemu_monitor.h
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu_monitor.h
|
||||
+++ libvirt-3.1.0/src/qemu/qemu_monitor.h
|
||||
@@ -246,6 +246,7 @@ char *qemuMonitorUnescapeArg(const char
|
||||
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
|
||||
virDomainChrSourceDefPtr config,
|
||||
bool json,
|
||||
+ unsigned long long timeout,
|
||||
qemuMonitorCallbacksPtr cb,
|
||||
void *opaque)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
|
||||
Index: libvirt-3.1.0/src/qemu/qemu_process.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu_process.c
|
||||
+++ libvirt-3.1.0/src/qemu/qemu_process.c
|
||||
@@ -1656,6 +1656,7 @@ qemuConnectMonitor(virQEMUDriverPtr driv
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
int ret = -1;
|
||||
qemuMonitorPtr mon = NULL;
|
||||
+ unsigned long long timeout = 0;
|
||||
|
||||
if (virSecurityManagerSetDaemonSocketLabel(driver->securityManager,
|
||||
vm->def) < 0) {
|
||||
@@ -1664,6 +1665,12 @@ qemuConnectMonitor(virQEMUDriverPtr driv
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ /* When using hugepages, kernel zeroes them out before
|
||||
+ * handing them over to qemu. This can be very time
|
||||
+ * consuming. Therefore, add a second to timeout for each
|
||||
+ * 1GiB of guest RAM. */
|
||||
+ timeout = vm->def->mem.total_memory / (1024 * 1024);
|
||||
+
|
||||
/* Hold an extra reference because we can't allow 'vm' to be
|
||||
* deleted until the monitor gets its own reference. */
|
||||
virObjectRef(vm);
|
||||
@@ -1674,6 +1681,7 @@ qemuConnectMonitor(virQEMUDriverPtr driv
|
||||
mon = qemuMonitorOpen(vm,
|
||||
priv->monConfig,
|
||||
priv->monJSON,
|
||||
+ timeout,
|
||||
&monitorCallbacks,
|
||||
driver);
|
||||
|
||||
Index: libvirt-3.1.0/tests/qemumonitortestutils.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tests/qemumonitortestutils.c
|
||||
+++ libvirt-3.1.0/tests/qemumonitortestutils.c
|
||||
@@ -1175,6 +1175,7 @@ qemuMonitorTestNew(bool json,
|
||||
if (!(test->mon = qemuMonitorOpen(test->vm,
|
||||
&src,
|
||||
json,
|
||||
+ 0,
|
||||
&qemuMonitorTestCallbacks,
|
||||
driver)))
|
||||
goto error;
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/examples/apparmor/libvirt-qemu
|
||||
Index: libvirt-3.2.0/examples/apparmor/libvirt-qemu
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-qemu
|
||||
+++ libvirt-3.1.0/examples/apparmor/libvirt-qemu
|
||||
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-qemu
|
||||
+++ libvirt-3.2.0/examples/apparmor/libvirt-qemu
|
||||
@@ -146,6 +146,9 @@
|
||||
# for restore
|
||||
/{usr/,}bin/bash rmix,
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/examples/apparmor/libvirt-lxc
|
||||
Index: libvirt-3.2.0/examples/apparmor/libvirt-lxc
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-lxc
|
||||
+++ libvirt-3.1.0/examples/apparmor/libvirt-lxc
|
||||
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-lxc
|
||||
+++ libvirt-3.2.0/examples/apparmor/libvirt-lxc
|
||||
@@ -2,39 +2,15 @@
|
||||
|
||||
#include <abstractions/base>
|
||||
|
@ -11,11 +11,11 @@ Signed-off-by: Chunyan Liu <cyliu@suse.com>
|
||||
src/qemu/qemu_driver.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
Index: libvirt-3.1.0/src/qemu/qemu_driver.c
|
||||
Index: libvirt-3.2.0/src/qemu/qemu_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu_driver.c
|
||||
+++ libvirt-3.1.0/src/qemu/qemu_driver.c
|
||||
@@ -16523,6 +16523,15 @@ qemuDomainBlockCopyCommon(virDomainObjPt
|
||||
--- libvirt-3.2.0.orig/src/qemu/qemu_driver.c
|
||||
+++ libvirt-3.2.0/src/qemu/qemu_driver.c
|
||||
@@ -16554,6 +16554,15 @@ qemuDomainBlockCopyCommon(virDomainObjPt
|
||||
_("non-file destination not supported yet"));
|
||||
goto endjob;
|
||||
}
|
||||
|
@ -1,165 +0,0 @@
|
||||
From d68cb4f554d16c2af79f64749e18d7d6cd9dd5b9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
|
||||
Date: Fri, 3 Mar 2017 12:16:32 +0100
|
||||
Subject: [PATCH 1/5] util: extract the request sending code from
|
||||
virNetlinkCommand()
|
||||
|
||||
Allow to reuse as much as possible from virNetlinkCommand(). This
|
||||
comment prepares for the introduction of virNetlinkDumpCommand()
|
||||
only differing by how it handles the responses.
|
||||
---
|
||||
src/util/virnetlink.c | 89 +++++++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 54 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c
|
||||
index a5d10fa8e..be00351db 100644
|
||||
--- a/src/util/virnetlink.c
|
||||
+++ b/src/util/virnetlink.c
|
||||
@@ -209,61 +209,38 @@ virNetlinkCreateSocket(int protocol)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
-
|
||||
-/**
|
||||
- * virNetlinkCommand:
|
||||
- * @nlmsg: pointer to netlink message
|
||||
- * @respbuf: pointer to pointer where response buffer will be allocated
|
||||
- * @respbuflen: pointer to integer holding the size of the response buffer
|
||||
- * on return of the function.
|
||||
- * @src_pid: the pid of the process to send a message
|
||||
- * @dst_pid: the pid of the process to talk to, i.e., pid = 0 for kernel
|
||||
- * @protocol: netlink protocol
|
||||
- * @groups: the group identifier
|
||||
- *
|
||||
- * Send the given message to the netlink layer and receive response.
|
||||
- * Returns 0 on success, -1 on error. In case of error, no response
|
||||
- * buffer will be returned.
|
||||
- */
|
||||
-int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
- struct nlmsghdr **resp, unsigned int *respbuflen,
|
||||
- uint32_t src_pid, uint32_t dst_pid,
|
||||
+static virNetlinkHandle *
|
||||
+virNetlinkSendRequest(struct nl_msg *nl_msg, uint32_t src_pid,
|
||||
+ struct sockaddr_nl nladdr,
|
||||
unsigned int protocol, unsigned int groups)
|
||||
{
|
||||
- int ret = -1;
|
||||
- struct sockaddr_nl nladdr = {
|
||||
- .nl_family = AF_NETLINK,
|
||||
- .nl_pid = dst_pid,
|
||||
- .nl_groups = 0,
|
||||
- };
|
||||
ssize_t nbytes;
|
||||
- struct pollfd fds[1];
|
||||
int fd;
|
||||
int n;
|
||||
- struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
|
||||
virNetlinkHandle *nlhandle = NULL;
|
||||
- int len = 0;
|
||||
+ struct pollfd fds[1];
|
||||
+ struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
|
||||
|
||||
if (protocol >= MAX_LINKS) {
|
||||
virReportSystemError(EINVAL,
|
||||
_("invalid protocol argument: %d"), protocol);
|
||||
- goto cleanup;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
if (!(nlhandle = virNetlinkCreateSocket(protocol)))
|
||||
- goto cleanup;
|
||||
+ goto error;
|
||||
|
||||
fd = nl_socket_get_fd(nlhandle);
|
||||
if (fd < 0) {
|
||||
virReportSystemError(errno,
|
||||
"%s", _("cannot get netlink socket fd"));
|
||||
- goto cleanup;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
if (groups && nl_socket_add_membership(nlhandle, groups) < 0) {
|
||||
virReportSystemError(errno,
|
||||
"%s", _("cannot add netlink membership"));
|
||||
- goto cleanup;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
nlmsg_set_dst(nl_msg, &nladdr);
|
||||
@@ -274,10 +251,11 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
if (nbytes < 0) {
|
||||
virReportSystemError(errno,
|
||||
"%s", _("cannot send to netlink socket"));
|
||||
- goto cleanup;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
memset(fds, 0, sizeof(fds));
|
||||
+
|
||||
fds[0].fd = fd;
|
||||
fds[0].events = POLLIN;
|
||||
|
||||
@@ -289,9 +267,51 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
if (n == 0)
|
||||
virReportSystemError(ETIMEDOUT, "%s",
|
||||
_("no valid netlink response was received"));
|
||||
- goto cleanup;
|
||||
}
|
||||
|
||||
+ return nlhandle;
|
||||
+
|
||||
+ error:
|
||||
+ virNetlinkFree(nlhandle);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * virNetlinkCommand:
|
||||
+ * @nlmsg: pointer to netlink message
|
||||
+ * @respbuf: pointer to pointer where response buffer will be allocated
|
||||
+ * @respbuflen: pointer to integer holding the size of the response buffer
|
||||
+ * on return of the function.
|
||||
+ * @src_pid: the pid of the process to send a message
|
||||
+ * @dst_pid: the pid of the process to talk to, i.e., pid = 0 for kernel
|
||||
+ * @protocol: netlink protocol
|
||||
+ * @groups: the group identifier
|
||||
+ *
|
||||
+ * Send the given message to the netlink layer and receive response.
|
||||
+ * Returns 0 on success, -1 on error. In case of error, no response
|
||||
+ * buffer will be returned.
|
||||
+ */
|
||||
+int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
+ struct nlmsghdr **resp, unsigned int *respbuflen,
|
||||
+ uint32_t src_pid, uint32_t dst_pid,
|
||||
+ unsigned int protocol, unsigned int groups)
|
||||
+{
|
||||
+ int ret = -1;
|
||||
+ struct sockaddr_nl nladdr = {
|
||||
+ .nl_family = AF_NETLINK,
|
||||
+ .nl_pid = dst_pid,
|
||||
+ .nl_groups = 0,
|
||||
+ };
|
||||
+ struct pollfd fds[1];
|
||||
+ virNetlinkHandle *nlhandle = NULL;
|
||||
+ int len = 0;
|
||||
+
|
||||
+ memset(fds, 0, sizeof(fds));
|
||||
+
|
||||
+ if (!(nlhandle = virNetlinkSendRequest(nl_msg, src_pid, nladdr,
|
||||
+ protocol, groups)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
len = nl_recv(nlhandle, &nladdr, (unsigned char **)resp, NULL);
|
||||
if (len == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
@@ -315,7 +335,6 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-
|
||||
/**
|
||||
* virNetlinkDumpLink:
|
||||
*
|
||||
--
|
||||
2.12.0
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7879029a0fcac4e58dbeec66f0bc77771565c4b6667212c8f6251eefb03732a9
|
||||
size 13906204
|
@ -1,10 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQEcBAABAgAGBQJYuUErAAoJEBVYiyZZa+pdWBkIAKVc+m0tbSTxBgszQCarG/f6
|
||||
cde4qCXZOVTpyIQFAtJajV/yhqM4uMhDOAZOGvxRWWIIGAXfPI5EAcsKGajIgAdX
|
||||
GWkzMc1a3JMzsXSveSUXboXvnfEilHquVVN+Hm2U9Y2eWy+daGCyl8j9+jyKRmzo
|
||||
sXzajagqNP/WrQTxoeIKbIaNlNoM/YmnySHNq/jjkWUYFFhK2dTz/qqfLCqrcygD
|
||||
iOARRi6QLQ2zbRiIOqf/tz2MNEPdgj6o31i2FT+pqLzIOTAhKXBXHD3V6TlSlRdY
|
||||
kwJWcIm8tjMqJ0UuJNRDvO1jQ9m4sbpLqRdL0HCaYHz5Pa1n04n/hzsCLIuePoY=
|
||||
=WTde
|
||||
-----END PGP SIGNATURE-----
|
3
libvirt-3.2.0.tar.xz
Normal file
3
libvirt-3.2.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9481a083b567a07927f239553dd70b5c0d1bff5b9b4ec61be1899981c646209e
|
||||
size 14057340
|
10
libvirt-3.2.0.tar.xz.asc
Normal file
10
libvirt-3.2.0.tar.xz.asc
Normal file
@ -0,0 +1,10 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQEcBAABAgAGBQJY4RMFAAoJEBVYiyZZa+pdScUIAMgcsw1t17IsF5VAjBRzz5bI
|
||||
a5XzJR5WFoziYHE+7M1N0brnh+h7c1AL3kYCz9+k611ql3QHVQs8lkt7tT8GTLLb
|
||||
FtiGrGREHUNy9xDGE1D32RhlrlNnruYLrkqBTc71dR3SQM2ePNfPAKVCYtZyWw7z
|
||||
vxKFRAz2R5uQ6XzW7Qo7OJONh9+3ufpHg/gTDR8gOxcQWnW8xUb440qNyrLXIE3F
|
||||
6TgAbdbCRarwCOb1aE5omp+0AFcnhnkXVChC9gugxvLaqM51A2Ppl5gmEa5J3gqU
|
||||
kUw7NlmzBrGldlG1RIlcPWS3lPRMm/lQkuvU1SYyJQVaYRVA25VcabyfnDdDUSY=
|
||||
=zFsI
|
||||
-----END PGP SIGNATURE-----
|
@ -1,9 +1,9 @@
|
||||
Adjust libvirt-guests init files to conform to SUSE standards
|
||||
|
||||
Index: libvirt-3.1.0/tools/libvirt-guests.init.in
|
||||
Index: libvirt-3.2.0/tools/libvirt-guests.init.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/libvirt-guests.init.in
|
||||
+++ libvirt-3.1.0/tools/libvirt-guests.init.in
|
||||
--- libvirt-3.2.0.orig/tools/libvirt-guests.init.in
|
||||
+++ libvirt-3.2.0/tools/libvirt-guests.init.in
|
||||
@@ -4,27 +4,27 @@
|
||||
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
|
||||
#
|
||||
@ -45,10 +45,10 @@ Index: libvirt-3.1.0/tools/libvirt-guests.init.in
|
||||
#
|
||||
|
||||
exec @libexecdir@/libvirt-guests.sh "$@"
|
||||
Index: libvirt-3.1.0/tools/libvirt-guests.sh.in
|
||||
Index: libvirt-3.2.0/tools/libvirt-guests.sh.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/libvirt-guests.sh.in
|
||||
+++ libvirt-3.1.0/tools/libvirt-guests.sh.in
|
||||
--- libvirt-3.2.0.orig/tools/libvirt-guests.sh.in
|
||||
+++ libvirt-3.2.0/tools/libvirt-guests.sh.in
|
||||
@@ -16,14 +16,13 @@
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
@ -208,10 +208,10 @@ Index: libvirt-3.1.0/tools/libvirt-guests.sh.in
|
||||
esac
|
||||
-exit $RETVAL
|
||||
+rc_exit
|
||||
Index: libvirt-3.1.0/tools/libvirt-guests.sysconf
|
||||
Index: libvirt-3.2.0/tools/libvirt-guests.sysconf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-3.1.0/tools/libvirt-guests.sysconf
|
||||
--- libvirt-3.2.0.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-3.2.0/tools/libvirt-guests.sysconf
|
||||
@@ -1,19 +1,29 @@
|
||||
+## Path: System/Virtualization/libvirt-guests
|
||||
+
|
||||
|
@ -2,10 +2,10 @@ Add POWER8 v2.0 and v2.1 to cpu map XML
|
||||
|
||||
From: <ro@suse.de>
|
||||
|
||||
Index: libvirt-3.1.0/src/cpu/cpu_map.xml
|
||||
Index: libvirt-3.2.0/src/cpu/cpu_map.xml
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/cpu/cpu_map.xml
|
||||
+++ libvirt-3.1.0/src/cpu/cpu_map.xml
|
||||
--- libvirt-3.2.0.orig/src/cpu/cpu_map.xml
|
||||
+++ libvirt-3.2.0/src/cpu/cpu_map.xml
|
||||
@@ -1569,6 +1569,8 @@
|
||||
<pvr value='0x004b0000' mask='0xffff0000'/>
|
||||
<pvr value='0x004c0000' mask='0xffff0000'/>
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: libvirt-3.1.0/configure.ac
|
||||
Index: libvirt-3.2.0/configure.ac
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/configure.ac
|
||||
+++ libvirt-3.1.0/configure.ac
|
||||
@@ -255,6 +255,7 @@ LIBVIRT_ARG_LIBSSH
|
||||
--- libvirt-3.2.0.orig/configure.ac
|
||||
+++ libvirt-3.2.0/configure.ac
|
||||
@@ -256,6 +256,7 @@ LIBVIRT_ARG_LIBSSH
|
||||
LIBVIRT_ARG_LIBXML
|
||||
LIBVIRT_ARG_MACVTAP
|
||||
LIBVIRT_ARG_NETCF
|
||||
@ -10,7 +10,7 @@ Index: libvirt-3.1.0/configure.ac
|
||||
LIBVIRT_ARG_NSS
|
||||
LIBVIRT_ARG_NUMACTL
|
||||
LIBVIRT_ARG_OPENWSMAN
|
||||
@@ -295,6 +296,7 @@ LIBVIRT_CHECK_LIBSSH
|
||||
@@ -296,6 +297,7 @@ LIBVIRT_CHECK_LIBSSH
|
||||
LIBVIRT_CHECK_LIBXML
|
||||
LIBVIRT_CHECK_MACVTAP
|
||||
LIBVIRT_CHECK_NETCF
|
||||
@ -18,7 +18,7 @@ Index: libvirt-3.1.0/configure.ac
|
||||
LIBVIRT_CHECK_NUMACTL
|
||||
LIBVIRT_CHECK_NWFILTER
|
||||
LIBVIRT_CHECK_OPENWSMAN
|
||||
@@ -966,6 +968,7 @@ LIBVIRT_RESULT_LIBXL
|
||||
@@ -968,6 +970,7 @@ LIBVIRT_RESULT_LIBXL
|
||||
LIBVIRT_RESULT_LIBXML
|
||||
LIBVIRT_RESULT_MACVTAP
|
||||
LIBVIRT_RESULT_NETCF
|
||||
@ -26,11 +26,11 @@ Index: libvirt-3.1.0/configure.ac
|
||||
LIBVIRT_RESULT_NSS
|
||||
LIBVIRT_RESULT_NUMACTL
|
||||
LIBVIRT_RESULT_OPENWSMAN
|
||||
Index: libvirt-3.1.0/src/Makefile.am
|
||||
Index: libvirt-3.2.0/src/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/Makefile.am
|
||||
+++ libvirt-3.1.0/src/Makefile.am
|
||||
@@ -959,6 +959,10 @@ if WITH_NETCF
|
||||
--- libvirt-3.2.0.orig/src/Makefile.am
|
||||
+++ libvirt-3.2.0/src/Makefile.am
|
||||
@@ -969,6 +969,10 @@ if WITH_NETCF
|
||||
INTERFACE_DRIVER_SOURCES += \
|
||||
interface/interface_backend_netcf.c
|
||||
endif WITH_NETCF
|
||||
@ -41,7 +41,7 @@ Index: libvirt-3.1.0/src/Makefile.am
|
||||
if WITH_UDEV
|
||||
INTERFACE_DRIVER_SOURCES += \
|
||||
interface/interface_backend_udev.c
|
||||
@@ -1620,6 +1624,10 @@ if WITH_NETCF
|
||||
@@ -1637,6 +1641,10 @@ if WITH_NETCF
|
||||
libvirt_driver_interface_la_CFLAGS += $(NETCF_CFLAGS)
|
||||
libvirt_driver_interface_la_LIBADD += $(NETCF_LIBS)
|
||||
endif WITH_NETCF
|
||||
@ -52,10 +52,10 @@ Index: libvirt-3.1.0/src/Makefile.am
|
||||
if WITH_UDEV
|
||||
libvirt_driver_interface_la_CFLAGS += $(UDEV_CFLAGS)
|
||||
libvirt_driver_interface_la_LIBADD += $(UDEV_LIBS)
|
||||
Index: libvirt-3.1.0/tools/virsh.c
|
||||
Index: libvirt-3.2.0/tools/virsh.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/virsh.c
|
||||
+++ libvirt-3.1.0/tools/virsh.c
|
||||
--- libvirt-3.2.0.orig/tools/virsh.c
|
||||
+++ libvirt-3.2.0/tools/virsh.c
|
||||
@@ -602,6 +602,8 @@ virshShowVersion(vshControl *ctl ATTRIBU
|
||||
vshPrint(ctl, " Interface");
|
||||
# if defined(WITH_NETCF)
|
||||
@ -65,10 +65,10 @@ Index: libvirt-3.1.0/tools/virsh.c
|
||||
# elif defined(WITH_UDEV)
|
||||
vshPrint(ctl, " udev");
|
||||
# endif
|
||||
Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
Index: libvirt-3.2.0/src/interface/interface_backend_netcf.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/interface/interface_backend_netcf.c
|
||||
+++ libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
--- libvirt-3.2.0.orig/src/interface/interface_backend_netcf.c
|
||||
+++ libvirt-3.2.0/src/interface/interface_backend_netcf.c
|
||||
@@ -23,7 +23,12 @@
|
||||
|
||||
#include <config.h>
|
||||
@ -83,7 +83,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
|
||||
#include "virerror.h"
|
||||
#include "datatypes.h"
|
||||
@@ -65,6 +70,37 @@ VIR_ONCE_GLOBAL_INIT(virNetcfDriverState
|
||||
@@ -66,6 +71,37 @@ VIR_ONCE_GLOBAL_INIT(virNetcfDriverState
|
||||
|
||||
static virNetcfDriverStatePtr driver;
|
||||
|
||||
@ -121,7 +121,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
|
||||
static void
|
||||
virNetcfDriverStateDispose(void *obj)
|
||||
@@ -87,6 +123,10 @@ netcfStateInitialize(bool privileged ATT
|
||||
@@ -88,6 +124,10 @@ netcfStateInitialize(bool privileged ATT
|
||||
if (!(driver = virObjectLockableNew(virNetcfDriverStateClass)))
|
||||
return -1;
|
||||
|
||||
@ -132,7 +132,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
/* open netcf */
|
||||
if (ncf_init(&driver->netcf, NULL) != 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
@@ -1140,6 +1180,19 @@ static virStateDriver interfaceStateDriv
|
||||
@@ -1141,6 +1181,19 @@ static virStateDriver interfaceStateDriv
|
||||
|
||||
int netcfIfaceRegister(void)
|
||||
{
|
||||
@ -152,10 +152,10 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
|
||||
if (virSetSharedInterfaceDriver(&interfaceDriver) < 0)
|
||||
return -1;
|
||||
if (virRegisterStateDriver(&interfaceStateDriver) < 0)
|
||||
Index: libvirt-3.1.0/src/interface/interface_driver.c
|
||||
Index: libvirt-3.2.0/src/interface/interface_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/interface/interface_driver.c
|
||||
+++ libvirt-3.1.0/src/interface/interface_driver.c
|
||||
--- libvirt-3.2.0.orig/src/interface/interface_driver.c
|
||||
+++ libvirt-3.2.0/src/interface/interface_driver.c
|
||||
@@ -30,8 +30,15 @@ interfaceRegister(void)
|
||||
if (netcfIfaceRegister() == 0)
|
||||
return 0;
|
||||
@ -173,10 +173,10 @@ Index: libvirt-3.1.0/src/interface/interface_driver.c
|
||||
if (udevIfaceRegister() == 0)
|
||||
return 0;
|
||||
#endif /* WITH_UDEV */
|
||||
Index: libvirt-3.1.0/m4/virt-netcontrol.m4
|
||||
Index: libvirt-3.2.0/m4/virt-netcontrol.m4
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-3.1.0/m4/virt-netcontrol.m4
|
||||
+++ libvirt-3.2.0/m4/virt-netcontrol.m4
|
||||
@@ -0,0 +1,39 @@
|
||||
+dnl The libnetcontrol library
|
||||
+dnl
|
||||
|
@ -1,3 +1,21 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Apr 3 04:40:57 UTC 2017 - jfehlig@suse.com
|
||||
|
||||
- Update to libvirt 3.2.0
|
||||
- Many incremental improvements and bug fixes, see
|
||||
http://libvirt.org/news.html
|
||||
- Dropped patches:
|
||||
67dcb797-virTimeBackOffWait-sleepcap.patch,
|
||||
85af0b80-qemu-adaptive-montimeout.patch,
|
||||
d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch,
|
||||
754515b7d-add-virNetlinkDumpCommand.patch,
|
||||
3ee35d7d6-more-uses-of-SYSCTL_PATH.patch,
|
||||
5dd607059-add-virNetDevGetName.patch,
|
||||
00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch
|
||||
- Add Conflicts=xendomains.service to libvirtd service
|
||||
suse-libvirtd-service.patch
|
||||
bsc#1015348
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 23 14:42:07 UTC 2017 - jengelh@inai.de
|
||||
|
||||
|
18
libvirt.spec
18
libvirt.spec
@ -175,7 +175,7 @@
|
||||
|
||||
Name: libvirt
|
||||
Url: http://libvirt.org/
|
||||
Version: 3.1.0
|
||||
Version: 3.2.0
|
||||
Release: 0
|
||||
Summary: Library providing a simple virtualization API
|
||||
License: LGPL-2.1+
|
||||
@ -317,13 +317,6 @@ Source4: libvirtd-relocation-server.fw
|
||||
Source99: baselibs.conf
|
||||
Source100: %{name}-rpmlintrc
|
||||
# Upstream patches
|
||||
Patch0: 67dcb797-virTimeBackOffWait-sleepcap.patch
|
||||
Patch1: 85af0b80-qemu-adaptive-montimeout.patch
|
||||
Patch2: d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch
|
||||
Patch3: 754515b7d-add-virNetlinkDumpCommand.patch
|
||||
Patch4: 3ee35d7d6-more-uses-of-SYSCTL_PATH.patch
|
||||
Patch5: 5dd607059-add-virNetDevGetName.patch
|
||||
Patch6: 00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch
|
||||
# Patches pending upstream review
|
||||
Patch100: libxl-dom-reset.patch
|
||||
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch
|
||||
@ -351,6 +344,7 @@ Patch211: qemu-apparmor-screenshot.patch
|
||||
Patch212: libvirt-suse-netcontrol.patch
|
||||
Patch213: lxc-wait-after-eth-del.patch
|
||||
Patch214: libxl-qemu-emulator-caps.patch
|
||||
Patch215: suse-libvirtd-service.patch
|
||||
# SLES-Only patches
|
||||
%if %{with_sle_build}
|
||||
Patch400: virt-create-rootfs.patch
|
||||
@ -891,13 +885,6 @@ libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch100 -p1
|
||||
%patch101 -p1
|
||||
%patch150 -p1
|
||||
@ -922,6 +909,7 @@ libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
%patch212 -p1
|
||||
%patch213 -p1
|
||||
%patch214 -p1
|
||||
%patch215 -p1
|
||||
%if %{with_sle_build}
|
||||
%patch400 -p1
|
||||
%endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/daemon/libvirtd.conf
|
||||
Index: libvirt-3.2.0/daemon/libvirtd.conf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-3.1.0/daemon/libvirtd.conf
|
||||
--- libvirt-3.2.0.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-3.2.0/daemon/libvirtd.conf
|
||||
@@ -18,8 +18,8 @@
|
||||
# It is necessary to setup a CA and issue server certificates before
|
||||
# using this capability.
|
||||
@ -13,10 +13,10 @@ Index: libvirt-3.1.0/daemon/libvirtd.conf
|
||||
|
||||
# Listen for unencrypted TCP connections on the public TCP/IP port.
|
||||
# NB, must pass the --listen flag to the libvirtd process for this to
|
||||
Index: libvirt-3.1.0/daemon/libvirtd-config.c
|
||||
Index: libvirt-3.2.0/daemon/libvirtd-config.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/daemon/libvirtd-config.c
|
||||
+++ libvirt-3.1.0/daemon/libvirtd-config.c
|
||||
--- libvirt-3.2.0.orig/daemon/libvirtd-config.c
|
||||
+++ libvirt-3.2.0/daemon/libvirtd-config.c
|
||||
@@ -110,7 +110,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
if (VIR_ALLOC(data) < 0)
|
||||
return NULL;
|
||||
@ -26,10 +26,10 @@ Index: libvirt-3.1.0/daemon/libvirtd-config.c
|
||||
data->listen_tcp = 0;
|
||||
|
||||
if (VIR_STRDUP(data->tls_port, LIBVIRTD_TLS_PORT) < 0 ||
|
||||
Index: libvirt-3.1.0/daemon/test_libvirtd.aug.in
|
||||
Index: libvirt-3.2.0/daemon/test_libvirtd.aug.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/daemon/test_libvirtd.aug.in
|
||||
+++ libvirt-3.1.0/daemon/test_libvirtd.aug.in
|
||||
--- libvirt-3.2.0.orig/daemon/test_libvirtd.aug.in
|
||||
+++ libvirt-3.2.0/daemon/test_libvirtd.aug.in
|
||||
@@ -2,7 +2,7 @@ module Test_libvirtd =
|
||||
::CONFIG::
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
Adjust libvirtd sysconfig file to conform to SUSE standards
|
||||
|
||||
Index: libvirt-3.1.0/daemon/libvirtd.sysconf
|
||||
Index: libvirt-3.2.0/daemon/libvirtd.sysconf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/daemon/libvirtd.sysconf
|
||||
+++ libvirt-3.1.0/daemon/libvirtd.sysconf
|
||||
--- libvirt-3.2.0.orig/daemon/libvirtd.sysconf
|
||||
+++ libvirt-3.2.0/daemon/libvirtd.sysconf
|
||||
@@ -1,16 +1,25 @@
|
||||
+## Path: System/Virtualization/libvirt
|
||||
+
|
||||
|
@ -8,10 +8,10 @@ Date: Mon Jun 23 15:51:20 2014 -0600
|
||||
option, but domainReset can be implemented in the libxl driver by
|
||||
forcibly destroying the domain and starting it again.
|
||||
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_driver.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_driver.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_driver.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_driver.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_driver.c
|
||||
@@ -1389,6 +1389,61 @@ libxlDomainReboot(virDomainPtr dom, unsi
|
||||
}
|
||||
|
||||
|
@ -8,10 +8,10 @@ as the default <emulator>, instead of the qemu-xen one.
|
||||
|
||||
See FATE#320638 for details.
|
||||
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_capabilities.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_capabilities.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_capabilities.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_capabilities.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_capabilities.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_capabilities.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "libxl_capabilities.h"
|
||||
#include "cpu/cpu_x86.h"
|
||||
|
@ -3,10 +3,10 @@ https://bugzilla.novell.com/show_bug.cgi?id=879425
|
||||
src/libxl/libxl_conf.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_conf.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_conf.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_conf.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_conf.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_conf.c
|
||||
@@ -609,6 +609,30 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
||||
#endif
|
||||
}
|
||||
|
@ -16,11 +16,11 @@ Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
tools/virsh.pod | 8 ++++++++
|
||||
6 files changed, 125 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: libvirt-3.1.0/include/libvirt/libvirt-domain.h
|
||||
Index: libvirt-3.2.0/include/libvirt/libvirt-domain.h
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/include/libvirt/libvirt-domain.h
|
||||
+++ libvirt-3.1.0/include/libvirt/libvirt-domain.h
|
||||
@@ -1000,6 +1000,31 @@ typedef enum {
|
||||
--- libvirt-3.2.0.orig/include/libvirt/libvirt-domain.h
|
||||
+++ libvirt-3.2.0/include/libvirt/libvirt-domain.h
|
||||
@@ -1008,6 +1008,31 @@ typedef enum {
|
||||
*/
|
||||
# define VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT "auto_converge.increment"
|
||||
|
||||
@ -52,10 +52,10 @@ Index: libvirt-3.1.0/include/libvirt/libvirt-domain.h
|
||||
/* Domain migration. */
|
||||
virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn,
|
||||
unsigned long flags, const char *dname,
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_driver.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_driver.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_driver.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_driver.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_driver.c
|
||||
@@ -6115,6 +6115,9 @@ libxlDomainMigratePerform3Params(virDoma
|
||||
const char *dname = NULL;
|
||||
const char *uri = NULL;
|
||||
@ -99,10 +99,10 @@ Index: libvirt-3.1.0/src/libxl/libxl_driver.c
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_migration.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_migration.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_migration.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_migration.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_migration.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_migration.c
|
||||
@@ -359,18 +359,39 @@ libxlMigrateReceive(virNetSocketPtr sock
|
||||
static int
|
||||
libxlDoMigrateSend(libxlDriverPrivatePtr driver,
|
||||
@ -263,10 +263,10 @@ Index: libvirt-3.1.0/src/libxl/libxl_migration.c
|
||||
virObjectLock(vm);
|
||||
|
||||
cleanup:
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_migration.h
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_migration.h
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_migration.h
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_migration.h
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_migration.h
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_migration.h
|
||||
@@ -39,6 +39,10 @@
|
||||
VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING, \
|
||||
VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING, \
|
||||
@ -311,13 +311,13 @@ Index: libvirt-3.1.0/src/libxl/libxl_migration.h
|
||||
|
||||
virDomainPtr
|
||||
libxlDomainMigrationFinish(virConnectPtr dconn,
|
||||
Index: libvirt-3.1.0/tools/virsh-domain.c
|
||||
Index: libvirt-3.2.0/tools/virsh-domain.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/virsh-domain.c
|
||||
+++ libvirt-3.1.0/tools/virsh-domain.c
|
||||
@@ -10222,6 +10222,22 @@ static const vshCmdOptDef opts_migrate[]
|
||||
.type = VSH_OT_STRING,
|
||||
.help = N_("filename containing updated persistent XML for the target")
|
||||
--- libvirt-3.2.0.orig/tools/virsh-domain.c
|
||||
+++ libvirt-3.2.0/tools/virsh-domain.c
|
||||
@@ -10284,6 +10284,22 @@ static const vshCmdOptDef opts_migrate[]
|
||||
.type = VSH_OT_BOOL,
|
||||
.help = N_("use TLS for migration")
|
||||
},
|
||||
+ {.name = "max_iters",
|
||||
+ .type = VSH_OT_INT,
|
||||
@ -338,7 +338,7 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
|
||||
{.name = NULL}
|
||||
};
|
||||
|
||||
@@ -10245,6 +10261,7 @@ doMigrate(void *opaque)
|
||||
@@ -10307,6 +10323,7 @@ doMigrate(void *opaque)
|
||||
unsigned long long ullOpt = 0;
|
||||
int rv;
|
||||
virConnectPtr dconn = data->dconn;
|
||||
@ -346,7 +346,7 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
|
||||
|
||||
sigemptyset(&sigmask);
|
||||
sigaddset(&sigmask, SIGINT);
|
||||
@@ -10364,6 +10381,27 @@ doMigrate(void *opaque)
|
||||
@@ -10426,6 +10443,27 @@ doMigrate(void *opaque)
|
||||
goto save_error;
|
||||
}
|
||||
|
||||
@ -374,11 +374,11 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
|
||||
if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0)
|
||||
goto out;
|
||||
if (opt) {
|
||||
Index: libvirt-3.1.0/tools/virsh.pod
|
||||
Index: libvirt-3.2.0/tools/virsh.pod
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tools/virsh.pod
|
||||
+++ libvirt-3.1.0/tools/virsh.pod
|
||||
@@ -1732,6 +1732,14 @@ compression. I<--comp-mt-threads> and I<
|
||||
--- libvirt-3.2.0.orig/tools/virsh.pod
|
||||
+++ libvirt-3.2.0/tools/virsh.pod
|
||||
@@ -1752,6 +1752,14 @@ compression. I<--comp-mt-threads> and I<
|
||||
of compress threads on source and the number of decompress threads on target
|
||||
respectively. I<--comp-xbzrle-cache> sets size of page cache in bytes.
|
||||
|
||||
|
@ -7,10 +7,10 @@ and npiv.
|
||||
|
||||
For more details, see bsc#954872 and FATE#319810
|
||||
|
||||
Index: libvirt-3.1.0/src/libxl/libxl_conf.c
|
||||
Index: libvirt-3.2.0/src/libxl/libxl_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/libxl/libxl_conf.c
|
||||
+++ libvirt-3.1.0/src/libxl/libxl_conf.c
|
||||
--- libvirt-3.2.0.orig/src/libxl/libxl_conf.c
|
||||
+++ libvirt-3.2.0/src/libxl/libxl_conf.c
|
||||
@@ -609,6 +609,25 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
||||
#endif
|
||||
}
|
||||
|
@ -13,47 +13,71 @@ device with the same name that is being created.
|
||||
src/lxc/lxc_process.c | 1 +
|
||||
3 files changed, 4 insertions(+)
|
||||
|
||||
Index: libvirt-3.1.0/src/lxc/lxc_controller.c
|
||||
Index: libvirt-3.2.0/src/lxc/lxc_controller.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/lxc/lxc_controller.c
|
||||
+++ libvirt-3.1.0/src/lxc/lxc_controller.c
|
||||
@@ -1997,6 +1997,7 @@ static int virLXCControllerDeleteInterfa
|
||||
--- libvirt-3.2.0.orig/src/lxc/lxc_controller.c
|
||||
+++ libvirt-3.2.0/src/lxc/lxc_controller.c
|
||||
@@ -73,6 +73,7 @@
|
||||
#include "rpc/virnetdaemon.h"
|
||||
#include "virstring.h"
|
||||
#include "virgettext.h"
|
||||
+#include "virutil.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_LXC
|
||||
|
||||
@@ -1997,6 +1998,7 @@ static int virLXCControllerDeleteInterfa
|
||||
if (virNetDevVethDelete(ctrl->veths[i]) < 0)
|
||||
ret = -1;
|
||||
}
|
||||
+ virFileWaitForDevices();
|
||||
+ virWaitForDevices();
|
||||
|
||||
return ret;
|
||||
}
|
||||
Index: libvirt-3.1.0/src/lxc/lxc_driver.c
|
||||
Index: libvirt-3.2.0/src/lxc/lxc_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/lxc/lxc_driver.c
|
||||
+++ libvirt-3.1.0/src/lxc/lxc_driver.c
|
||||
@@ -4036,6 +4036,7 @@ lxcDomainAttachDeviceNetLive(virConnectP
|
||||
--- libvirt-3.2.0.orig/src/lxc/lxc_driver.c
|
||||
+++ libvirt-3.2.0/src/lxc/lxc_driver.c
|
||||
@@ -76,6 +76,7 @@
|
||||
#include "virtime.h"
|
||||
#include "virtypedparam.h"
|
||||
#include "viruri.h"
|
||||
+#include "virutil.h"
|
||||
#include "virstring.h"
|
||||
#include "viraccessapicheck.h"
|
||||
#include "viraccessapichecklxc.h"
|
||||
@@ -4035,6 +4036,7 @@ lxcDomainAttachDeviceNetLive(virConnectP
|
||||
case VIR_DOMAIN_NET_TYPE_NETWORK:
|
||||
case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||
ignore_value(virNetDevVethDelete(veth));
|
||||
+ virFileWaitForDevices();
|
||||
+ virWaitForDevices();
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||
@@ -4470,6 +4471,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb
|
||||
@@ -4469,6 +4471,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb
|
||||
virDomainAuditNet(vm, detach, NULL, "detach", false);
|
||||
goto cleanup;
|
||||
}
|
||||
+ virFileWaitForDevices();
|
||||
+ virWaitForDevices();
|
||||
break;
|
||||
|
||||
/* It'd be nice to support this, but with macvlan
|
||||
Index: libvirt-3.1.0/src/lxc/lxc_process.c
|
||||
Index: libvirt-3.2.0/src/lxc/lxc_process.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/lxc/lxc_process.c
|
||||
+++ libvirt-3.1.0/src/lxc/lxc_process.c
|
||||
@@ -221,6 +221,7 @@ static void virLXCProcessCleanup(virLXCD
|
||||
--- libvirt-3.2.0.orig/src/lxc/lxc_process.c
|
||||
+++ libvirt-3.2.0/src/lxc/lxc_process.c
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "viratomic.h"
|
||||
#include "virprocess.h"
|
||||
#include "virsystemd.h"
|
||||
+#include "virutil.h"
|
||||
#include "netdev_bandwidth_conf.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_LXC
|
||||
@@ -221,6 +222,7 @@ static void virLXCProcessCleanup(virLXCD
|
||||
}
|
||||
networkReleaseActualDevice(vm->def, iface);
|
||||
}
|
||||
+ virFileWaitForDevices();
|
||||
+ virWaitForDevices();
|
||||
|
||||
virDomainConfVMNWFilterTeardown(vm);
|
||||
|
||||
|
@ -17,11 +17,11 @@ Signed-off-by: Martin Wilck <mwilck@suse.com>
|
||||
tests/networkxml2confdata/dhcp6host-routed-network.conf | 1 -
|
||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: libvirt-3.1.0/src/network/bridge_driver.c
|
||||
Index: libvirt-3.2.0/src/network/bridge_driver.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/network/bridge_driver.c
|
||||
+++ libvirt-3.1.0/src/network/bridge_driver.c
|
||||
@@ -1398,7 +1398,14 @@ networkDnsmasqConfContents(virNetworkObj
|
||||
--- libvirt-3.2.0.orig/src/network/bridge_driver.c
|
||||
+++ libvirt-3.2.0/src/network/bridge_driver.c
|
||||
@@ -1413,7 +1413,14 @@ networkDnsmasqConfContents(virNetworkObj
|
||||
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) {
|
||||
if (ipdef->nranges || ipdef->nhosts) {
|
||||
virBufferAddLit(&configbuf, "dhcp-no-override\n");
|
||||
@ -37,10 +37,10 @@ Index: libvirt-3.1.0/src/network/bridge_driver.c
|
||||
}
|
||||
|
||||
if (ipdef->tftproot) {
|
||||
Index: libvirt-3.1.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
Index: libvirt-3.2.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
+++ libvirt-3.1.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
--- libvirt-3.2.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
+++ libvirt-3.2.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
|
||||
@@ -10,7 +10,6 @@ bind-dynamic
|
||||
interface=virbr1
|
||||
dhcp-range=192.168.122.1,static
|
||||
|
@ -2,10 +2,10 @@ Canonicalize hostarch name ppc64le to ppc64
|
||||
|
||||
See bnc#894956
|
||||
|
||||
Index: libvirt-3.1.0/src/util/virarch.c
|
||||
Index: libvirt-3.2.0/src/util/virarch.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/util/virarch.c
|
||||
+++ libvirt-3.1.0/src/util/virarch.c
|
||||
--- libvirt-3.2.0.orig/src/util/virarch.c
|
||||
+++ libvirt-3.2.0/src/util/virarch.c
|
||||
@@ -169,6 +169,8 @@ virArch virArchFromHost(void)
|
||||
arch = VIR_ARCH_I686;
|
||||
} else if (STREQ(ut.machine, "amd64")) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/examples/apparmor/libvirt-qemu
|
||||
Index: libvirt-3.2.0/examples/apparmor/libvirt-qemu
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-qemu
|
||||
+++ libvirt-3.1.0/examples/apparmor/libvirt-qemu
|
||||
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-qemu
|
||||
+++ libvirt-3.2.0/examples/apparmor/libvirt-qemu
|
||||
@@ -154,3 +154,6 @@
|
||||
/etc/udev/udev.conf r,
|
||||
/sys/bus/ r,
|
||||
|
@ -8,10 +8,10 @@ Subject: [PATCH] support managed pci devices in xen driver
|
||||
src/xenxs/xen_xm.c | 28 +++++++++++++++++++++++++++-
|
||||
2 files changed, 35 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: libvirt-3.1.0/src/xenconfig/xen_common.c
|
||||
Index: libvirt-3.2.0/src/xenconfig/xen_common.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/xenconfig/xen_common.c
|
||||
+++ libvirt-3.1.0/src/xenconfig/xen_common.c
|
||||
--- libvirt-3.2.0.orig/src/xenconfig/xen_common.c
|
||||
+++ libvirt-3.2.0/src/xenconfig/xen_common.c
|
||||
@@ -394,6 +394,8 @@ xenParsePCI(virConfPtr conf, virDomainDe
|
||||
{
|
||||
virConfValuePtr list = virConfGetValue(conf, "pci");
|
||||
@ -66,10 +66,10 @@ Index: libvirt-3.1.0/src/xenconfig/xen_common.c
|
||||
hostdev->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
|
||||
hostdev->source.subsys.u.pci.addr.domain = domainID;
|
||||
hostdev->source.subsys.u.pci.addr.bus = busID;
|
||||
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
@@ -1062,6 +1062,7 @@ xenParseSxprPCI(virDomainDefPtr def,
|
||||
int busID;
|
||||
int slotID;
|
||||
|
19
suse-libvirtd-service.patch
Normal file
19
suse-libvirtd-service.patch
Normal file
@ -0,0 +1,19 @@
|
||||
Add Conflicts=xendomains.service to libvirtd service
|
||||
|
||||
On SUSE distros, we promote libvirt and all the libvirt-based
|
||||
tools. If a user installs libvirt on their SUSE Xen host, then libvirt
|
||||
should be king and override xendomains.
|
||||
|
||||
bsc#1015348
|
||||
Index: libvirt-3.2.0/daemon/libvirtd.service.in
|
||||
===================================================================
|
||||
--- libvirt-3.2.0.orig/daemon/libvirtd.service.in
|
||||
+++ libvirt-3.2.0/daemon/libvirtd.service.in
|
||||
@@ -15,6 +15,7 @@ After=apparmor.service
|
||||
After=local-fs.target
|
||||
After=remote-fs.target
|
||||
After=xencommons.service
|
||||
+Conflicts=xendomains.service
|
||||
Documentation=man:libvirtd(8)
|
||||
Documentation=http://libvirt.org
|
||||
|
@ -7,11 +7,11 @@ suse-qemu-conf-secdriver.patch, suse-qemu-conf-lockmgr.patch,
|
||||
etc.), but for now they are all lumped together in this
|
||||
single patch.
|
||||
|
||||
Index: libvirt-3.1.0/src/qemu/qemu.conf
|
||||
Index: libvirt-3.2.0/src/qemu/qemu.conf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/qemu/qemu.conf
|
||||
+++ libvirt-3.1.0/src/qemu/qemu.conf
|
||||
@@ -283,11 +283,20 @@
|
||||
--- libvirt-3.2.0.orig/src/qemu/qemu.conf
|
||||
+++ libvirt-3.2.0/src/qemu/qemu.conf
|
||||
@@ -332,11 +332,20 @@
|
||||
# isolation, but it cannot appear in a list of drivers.
|
||||
#
|
||||
#security_driver = "selinux"
|
||||
@ -34,7 +34,7 @@ Index: libvirt-3.1.0/src/qemu/qemu.conf
|
||||
|
||||
# If set to non-zero, then attempts to create unconfined
|
||||
# guests will be blocked. Defaults to 0.
|
||||
@@ -531,11 +540,22 @@
|
||||
@@ -580,11 +589,22 @@
|
||||
#allow_disk_format_probing = 1
|
||||
|
||||
|
||||
@ -62,7 +62,7 @@ Index: libvirt-3.1.0/src/qemu/qemu.conf
|
||||
#
|
||||
#lock_manager = "lockd"
|
||||
|
||||
@@ -626,9 +646,8 @@
|
||||
@@ -675,9 +695,8 @@
|
||||
# for x86_64 and i686, but it's AAVMF for aarch64. The libvirt default
|
||||
# follows this scheme.
|
||||
#nvram = [
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/daemon/libvirtd.service.in
|
||||
Index: libvirt-3.2.0/daemon/libvirtd.service.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/daemon/libvirtd.service.in
|
||||
+++ libvirt-3.1.0/daemon/libvirtd.service.in
|
||||
--- libvirt-3.2.0.orig/daemon/libvirtd.service.in
|
||||
+++ libvirt-3.2.0/daemon/libvirtd.service.in
|
||||
@@ -14,6 +14,7 @@ After=iscsid.service
|
||||
After=apparmor.service
|
||||
After=local-fs.target
|
||||
|
@ -1,9 +1,9 @@
|
||||
Adjust virtlockd init files to conform to SUSE standards
|
||||
|
||||
Index: libvirt-3.1.0/src/locking/virtlockd.sysconf
|
||||
Index: libvirt-3.2.0/src/locking/virtlockd.sysconf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/locking/virtlockd.sysconf
|
||||
+++ libvirt-3.1.0/src/locking/virtlockd.sysconf
|
||||
--- libvirt-3.2.0.orig/src/locking/virtlockd.sysconf
|
||||
+++ libvirt-3.2.0/src/locking/virtlockd.sysconf
|
||||
@@ -1,3 +1,7 @@
|
||||
+## Path: System/Virtualization/virtlockd
|
||||
+
|
||||
@ -12,10 +12,10 @@ Index: libvirt-3.1.0/src/locking/virtlockd.sysconf
|
||||
#
|
||||
# Pass extra arguments to virtlockd
|
||||
#VIRTLOCKD_ARGS=
|
||||
Index: libvirt-3.1.0/src/locking/virtlockd.init.in
|
||||
Index: libvirt-3.2.0/src/locking/virtlockd.init.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/locking/virtlockd.init.in
|
||||
+++ libvirt-3.1.0/src/locking/virtlockd.init.in
|
||||
--- libvirt-3.2.0.orig/src/locking/virtlockd.init.in
|
||||
+++ libvirt-3.2.0/src/locking/virtlockd.init.in
|
||||
@@ -4,59 +4,57 @@
|
||||
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
|
||||
#
|
||||
|
@ -1,9 +1,9 @@
|
||||
Adjust virtlogd init files to conform to SUSE standards
|
||||
|
||||
Index: libvirt-3.1.0/src/logging/virtlogd.init.in
|
||||
Index: libvirt-3.2.0/src/logging/virtlogd.init.in
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/logging/virtlogd.init.in
|
||||
+++ libvirt-3.1.0/src/logging/virtlogd.init.in
|
||||
--- libvirt-3.2.0.orig/src/logging/virtlogd.init.in
|
||||
+++ libvirt-3.2.0/src/logging/virtlogd.init.in
|
||||
@@ -4,59 +4,56 @@
|
||||
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
|
||||
#
|
||||
@ -126,10 +126,10 @@ Index: libvirt-3.1.0/src/logging/virtlogd.init.in
|
||||
esac
|
||||
-exit $RETVAL
|
||||
+rc_exit
|
||||
Index: libvirt-3.1.0/src/logging/virtlogd.sysconf
|
||||
Index: libvirt-3.2.0/src/logging/virtlogd.sysconf
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/logging/virtlogd.sysconf
|
||||
+++ libvirt-3.1.0/src/logging/virtlogd.sysconf
|
||||
--- libvirt-3.2.0.orig/src/logging/virtlogd.sysconf
|
||||
+++ libvirt-3.2.0/src/logging/virtlogd.sysconf
|
||||
@@ -1,3 +1,7 @@
|
||||
+## Path: System/Virtualization/virtlogd
|
||||
+
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
@@ -392,7 +392,7 @@ xenParseSxprVifRate(const char *rate, un
|
||||
static int
|
||||
xenParseSxprDisks(virDomainDefPtr def,
|
||||
|
@ -6,10 +6,10 @@ and 'file'. This was implicitly done prior to commit 9673418c.
|
||||
|
||||
https://bugzilla.suse.com/show_bug.cgi?id=938228
|
||||
|
||||
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
|
||||
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
|
||||
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
|
||||
@@ -506,10 +506,11 @@ xenParseSxprDisks(virDomainDefPtr def,
|
||||
omnipotent, we can revisit this, perhaps stat()'ing
|
||||
the src file in question */
|
||||
|
Loading…
Reference in New Issue
Block a user