From 59f2770eb35f03d61fc708a6241628c83c4f786a Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 2 Oct 2014 16:44:07 +0100 Subject: [PATCH] RHEL 7: Revert "launch: libvirt: Use qemu-bridge-helper to implement a full network (RHBZ#1148012)." This reverts commit 224de20b9a8d5ea56f6337f19b4ca237bb88eca0. --- src/guestfs.pod | 10 ---------- src/launch-libvirt.c | 44 +++++++++++++++++++++----------------------- 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/src/guestfs.pod b/src/guestfs.pod index 17d9a62..af30406 100644 --- a/src/guestfs.pod +++ b/src/guestfs.pod @@ -1432,16 +1432,6 @@ On Fedora, install C for the C file (containing symbols). Make sure the symbols precisely match the kernel being used. -=head3 network_bridge - -The libvirt backend supports: - - export LIBGUESTFS_BACKEND_SETTINGS=network_bridge=virbrX - -This allows you to override the bridge that is connected to when the -network is enabled. The default is C. See also -L. - =head2 ATTACHING TO RUNNING DAEMONS I This is B and has a tendency to eat diff --git a/src/launch-libvirt.c b/src/launch-libvirt.c index ec23fab..38ca4a5 100644 --- a/src/launch-libvirt.c +++ b/src/launch-libvirt.c @@ -115,7 +115,6 @@ struct backend_libvirt_data { char *selinux_label; char *selinux_imagelabel; bool selinux_norelabel_disks; - char *network_bridge; char name[DOMAIN_NAME_LEN]; /* random name */ bool is_kvm; /* false = qemu, true = kvm (from capabilities)*/ unsigned long libvirt_version; /* libvirt version */ @@ -422,12 +421,6 @@ launch_libvirt (guestfs_h *g, void *datav, const char *libvirt_uri) guestfs_get_backend_setting (g, "internal_libvirt_imagelabel"); data->selinux_norelabel_disks = guestfs_int_get_backend_setting_bool (g, "internal_libvirt_norelabel_disks"); - if (g->enable_network) { - data->network_bridge = - guestfs_get_backend_setting (g, "network_bridge"); - if (!data->network_bridge) - data->network_bridge = safe_strdup (g, "virbr0"); - } guestfs_pop_error_handler (g); if (g->enable_network && check_bridge_exists (g, data->network_bridge) == -1) @@ -1366,19 +1359,6 @@ construct_libvirt_xml_devices (guestfs_h *g, } end_element (); } end_element (); - /* Connect to libvirt bridge (see: RHBZ#1148012). */ - if (g->enable_network) { - start_element ("interface") { - attribute ("type", "bridge"); - start_element ("source") { - attribute ("bridge", params->data->network_bridge); - } end_element (); - start_element ("model") { - attribute ("type", "virtio"); - } end_element (); - } end_element (); - } - } end_element (); /* */ return 0; @@ -1741,6 +1721,27 @@ construct_libvirt_xml_qemu_cmdline (guestfs_h *g, attribute ("value", tmpdir); } end_element (); + /* Workaround because libvirt user networking cannot specify "net=" + * parameter. + */ + if (g->enable_network) { + start_element ("qemu:arg") { + attribute ("value", "-netdev"); + } end_element (); + + start_element ("qemu:arg") { + attribute ("value", "user,id=usernet,net=169.254.0.0/16"); + } end_element (); + + start_element ("qemu:arg") { + attribute ("value", "-device"); + } end_element (); + + start_element ("qemu:arg") { + attribute ("value", VIRTIO_NET ",netdev=usernet"); + } end_element (); + } + /* The qemu command line arguments requested by the caller. */ for (hp = g->hv_params; hp; hp = hp->next) { start_element ("qemu:arg") { @@ -2056,9 +2057,6 @@ shutdown_libvirt (guestfs_h *g, void *datav, int check_for_errors) free (data->selinux_imagelabel); data->selinux_imagelabel = NULL; - free (data->network_bridge); - data->network_bridge = NULL; - for (i = 0; i < data->nr_secrets; ++i) free (data->secrets[i].secret); free (data->secrets); -- 1.8.3.1