-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 When using the xm/xend stack to manage instances there is a bug that causes the emulated interfaces to be unusable when the vif config contains type=ioemu. The current code already has a special quirk to not use this keyword if no specific model is given for the emulated NIC (defaulting to rtl8139). Essentially it works because regardless of the type argument, the Xen stack always creates emulated and paravirt interfaces and lets the guest decide which one to use. So neither xl nor xm stack actually require the type keyword for emulated NICs. - --- /* * apparently type ioemu breaks paravirt drivers on HVM so skip this * from XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU */ if (xendConfigVersion <= XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU) virBufferAddLit(&buf, ",type=ioemu"); - --- This is still broken when a different emulated NIC (eg. e1000 is enforced), but the same fix solves that problem. Which is what the attached patch does. I have been testing with this change applied and was able to change between various emulated NIC models successfully. I believe it would be applicable to libvirt upstream, too. - -Stefan PS: Please cc: me directly on replies as I am not subscribed to this list. Thanks. diff -Nurp libvirt.old/src/xenxs/xen_sxpr.c libvirt-0.9.8/src/xenxs/xen_sxpr.c - --- libvirt.old/src/xenxs/xen_sxpr.c 2012-03-16 11:17:02.685042296 +0100 +++ libvirt-0.9.8/src/xenxs/xen_sxpr.c 2012-03-15 18:43:32.000000000 +0100 @@ -1873,7 +1873,9 @@ xenFormatSxprNet(virConnectPtr conn, } else { virBufferEscapeSexpr(buf, "(model '%s')", def->model); - - virBufferAddLit(buf, "(type ioemu)"); + /* See above. Also needed when model is specified. */ + if (xendConfigVersion <= XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU) + virBufferAddLit(buf, "(type ioemu)"); } if (!isAttach) diff -Nurp libvirt.old/src/xenxs/xen_xm.c libvirt-0.9.8/src/xenxs/xen_xm.c - --- libvirt.old/src/xenxs/xen_xm.c 2012-03-16 11:17:02.645042103 +0100 +++ libvirt-0.9.8/src/xenxs/xen_xm.c 2012-03-15 18:43:32.000000000 +0100 @@ -1335,7 +1335,9 @@ static int xenFormatXMNet(virConnectPtr } else { virBufferAsprintf(&buf, ",model=%s", net->model); - - virBufferAddLit(&buf, ",type=ioemu"); + /* See above. Also needed if model is specified. */ + if (xendConfigVersion <= XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU) + virBufferAddLit(&buf, ",type=ioemu"); } if (net->ifname) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQIcBAEBCgAGBQJPYxc9AAoJEOhnXe7L7s6j3f8P/3nyZUh5dY8vVcGsRX9mkoX5 DwioJfLit8wjNUX3iJciPnTCUprJeiOpev/dKuuIaUfSEOP+xzHKcAbSVdyXhlME R5n+EbBI6WBDbVT/rbV+Mp52bVoe3vb8LgT2dc1KzYYpcMjlzAzUd56IdJ64YQaS r9o6ps279jY6AeDEEnz0TTajKdNbMBt578kwmsES/1rHMVLT2wLrnQp6Kc9ECQ5o YjpOAU55Bl8OP+1DK0SFSyRl1gesrUXCN1g6QsWiiaeq0OpO8TDxfpxoBKwV19cO kFHoZ8UR4XyaDosVg0S2+WaOn7o8B7r1k+biD23L4QaADcsN+l4uuDHaHYX4nd/L PpbUpZY8+KjTny6H/khqYYJR/G9Wl7L6GMlGLJLihlue3/iIfrHJZdF1+dFgo9uZ vaYgjZWe1ak9vQIUfxa4enxdadBYS7Xy1JP9egA87DACnpzOEWgZ6Qadhcj0cewm MHfEmFWnaHHLI+TqaLSwN3XeTsbZ2GP8ixlW+ewNyAPd76g3uYFVTxDOd9a+r301 C+jtgwDcG1aciXR/diR/Dnr7JZ3Y9Fgu/gt/n0Pr4tIgiYF8+T4WG0osXssiiqbc 3p92VzkEl3P/g5QRdeB/+XxGz9IfAikALyNO4ztFSxk4JIh1ix/OIoaucNSc7XFl boPeTDnZLrdIVncDmJ5c =RhMW -----END PGP SIGNATURE-----
diff -Nurp libvirt.old/src/xenxs/xen_sxpr.c libvirt-0.9.8/src/xenxs/xen_sxpr.c --- libvirt.old/src/xenxs/xen_sxpr.c 2012-03-16 11:17:02.685042296 +0100 +++ libvirt-0.9.8/src/xenxs/xen_sxpr.c 2012-03-15 18:43:32.000000000 +0100 @@ -1873,7 +1873,9 @@ xenFormatSxprNet(virConnectPtr conn, } else { virBufferEscapeSexpr(buf, "(model '%s')", def->model); - virBufferAddLit(buf, "(type ioemu)"); + /* See above. Also needed when model is specified. */ + if (xendConfigVersion <= XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU) + virBufferAddLit(buf, "(type ioemu)"); } if (!isAttach) diff -Nurp libvirt.old/src/xenxs/xen_xm.c libvirt-0.9.8/src/xenxs/xen_xm.c --- libvirt.old/src/xenxs/xen_xm.c 2012-03-16 11:17:02.645042103 +0100 +++ libvirt-0.9.8/src/xenxs/xen_xm.c 2012-03-15 18:43:32.000000000 +0100 @@ -1335,7 +1335,9 @@ static int xenFormatXMNet(virConnectPtr } else { virBufferAsprintf(&buf, ",model=%s", net->model); - virBufferAddLit(&buf, ",type=ioemu"); + /* See above. Also needed if model is specified. */ + if (xendConfigVersion <= XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU) + virBufferAddLit(&buf, ",type=ioemu"); } if (net->ifname)
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list