Richard W.M. Jones
2014-Mar-27 18:47 UTC
[Libguestfs] [PATCH 0/2] launch: libvirt: Use libvirt to set up the user network.
Use libvirt to set up the user network instead of a custom qemu argument. Note this requires a non-upstream patch being discussed on the libvirt mailing list at the moment. https://bugzilla.redhat.com/show_bug.cgi?id=1075520#c6 Rich.
Richard W.M. Jones
2014-Mar-27 18:47 UTC
[Libguestfs] [PATCH 1/2] launch: libvirt: Store libvirt version number in the backend data.
This lets us generate XML conditionally based on libvirt version.
---
src/launch-libvirt.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/launch-libvirt.c b/src/launch-libvirt.c
index e4563f8..7653bf9 100644
--- a/src/launch-libvirt.c
+++ b/src/launch-libvirt.c
@@ -100,6 +100,7 @@ xmlBufferDetach (xmlBufferPtr buf)
/* Per-handle data. */
struct backend_libvirt_data {
+ unsigned long version; /* libvirt version */
virConnectPtr conn; /* libvirt connection */
virDomainPtr dom; /* libvirt domain */
char *selinux_label;
@@ -208,7 +209,6 @@ launch_libvirt (guestfs_h *g, void *datav, const char
*libvirt_uri)
{
struct backend_libvirt_data *data = datav;
int daemon_accept_sock = -1, console_sock = -1;
- unsigned long version;
virConnectPtr conn = NULL;
virDomainPtr dom = NULL;
CLEANUP_FREE char *capabilities_xml = NULL;
@@ -234,11 +234,13 @@ launch_libvirt (guestfs_h *g, void *datav, const char
*libvirt_uri)
return -1;
}
- virGetVersion (&version, NULL, NULL);
+ virGetVersion (&data->version, NULL, NULL);
debug (g, "libvirt version = %lu (%lu.%lu.%lu)",
- version,
- version / 1000000UL, version / 1000UL % 1000UL, version % 1000UL);
- if (version < MIN_LIBVIRT_VERSION) {
+ data->version,
+ data->version / 1000000UL,
+ data->version / 1000UL % 1000UL,
+ data->version % 1000UL);
+ if (data->version < MIN_LIBVIRT_VERSION) {
error (g, _("you must have libvirt >= %d.%d.%d "
"to use the 'libvirt' backend"),
MIN_LIBVIRT_MAJOR, MIN_LIBVIRT_MINOR, MIN_LIBVIRT_MICRO);
--
1.8.5.3
Richard W.M. Jones
2014-Mar-27 18:47 UTC
[Libguestfs] [PATCH 2/2] launch: libvirt: Use libvirt to set up the user network.
This only works in libvirt >= 1.3.0. See:
https://bugzilla.redhat.com/show_bug.cgi?id=1075520
Thanks: Michal Privoznik
---
src/launch-libvirt.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/launch-libvirt.c b/src/launch-libvirt.c
index 7653bf9..87ad21a 100644
--- a/src/launch-libvirt.c
+++ b/src/launch-libvirt.c
@@ -1210,6 +1210,20 @@ construct_libvirt_xml_devices (guestfs_h *g,
} end_element ();
} end_element ();
+ /* User network using libvirt >= 1.3.0. */
+ if (params->data->version >= 1003000 &&
g->enable_network) {
+ start_element ("interface") {
+ attribute ("type", "user");
+ start_element ("ip") {
+ attribute ("address", "169.254.0.0");
+ attribute ("prefix", "16");
+ } end_element ();
+ start_element ("model") {
+ attribute ("type", VIRTIO_NET);
+ } end_element ();
+ } end_element ();
+ }
+
} end_element (); /* </devices> */
return 0;
@@ -1588,10 +1602,11 @@ construct_libvirt_xml_qemu_cmdline (guestfs_h *g,
attribute ("value", tmpdir);
} end_element ();
- /* Workaround because libvirt user networking cannot specify
"net="
- * parameter.
+ /* Workaround because libvirt user networking cannot specify
+ * "net=" parameter. We can remove this when the min required
+ * libvirt version is >= 1.3.0.
*/
- if (g->enable_network) {
+ if (params->data->version < 1003000 &&
g->enable_network) {
start_element ("qemu:arg") {
attribute ("value", "-netdev");
} end_element ();
--
1.8.5.3
Daniel P. Berrange
2014-Mar-28 11:04 UTC
Re: [Libguestfs] [PATCH 2/2] launch: libvirt: Use libvirt to set up the user network.
On Thu, Mar 27, 2014 at 06:47:55PM +0000, Richard W.M. Jones wrote:> This only works in libvirt >= 1.3.0. See:The release we're about todo is 1.2.3, and it isn't clear if we'll go to 1.2.4 or 1.3.0 yet - probably the former at this point. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
Reasonably Related Threads
- [PATCH] Revert "launch: libvirt: Use qemu-bridge-helper to implement
- [PATCH 1/2] appliance: Use dhclient instead of hard-coding IP address of appliance.
- [PATCH v2] Revert "launch: libvirt: Use qemu-bridge-helper to implement a full network (RHBZ#1148012)."
- [PATCH v3 0/4] launch: libvirt: Use qemu-bridge-helper to implement a
- [PATCH v2 0/4] launch: libvirt: Use qemu-bridge-helper to implement a full network (RHBZ#1148012).