summaryrefslogtreecommitdiff
path: root/src/xenxs
diff options
context:
space:
mode:
authorStefan Bader <stefan.bader@canonical.com>2012-04-13 15:14:56 +0200
committerEric Blake <eblake@redhat.com>2012-04-16 22:20:31 -0600
commit10c31135f321851f02ad1985684389a42f6f5e54 (patch)
tree3d478c1f00a9c1026702cbf01fe65fa2d6203e55 /src/xenxs
parentopenvz: Correct the comments for new node APIs (diff)
downloadlibvirt-10c31135f321851f02ad1985684389a42f6f5e54.tar.gz
libvirt-10c31135f321851f02ad1985684389a42f6f5e54.tar.bz2
libvirt-10c31135f321851f02ad1985684389a42f6f5e54.zip
xen: do not use ioemu type for any emulated NIC
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,i 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. Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Diffstat (limited to 'src/xenxs')
-rw-r--r--src/xenxs/xen_sxpr.c28
-rw-r--r--src/xenxs/xen_xm.c27
2 files changed, 29 insertions, 26 deletions
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index e1bbd7668..3a56345a9 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -1999,20 +1999,22 @@ xenFormatSxprNet(virConnectPtr conn,
if (def->model != NULL)
virBufferEscapeSexpr(buf, "(model '%s')", def->model);
}
- else if (def->model == NULL) {
- /*
- * 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)");
- }
- else if (STREQ(def->model, "netfront")) {
- virBufferAddLit(buf, "(type netfront)");
- }
else {
- virBufferEscapeSexpr(buf, "(model '%s')", def->model);
- virBufferAddLit(buf, "(type ioemu)");
+ if (def->model != NULL && STREQ(def->model, "netfront")) {
+ virBufferAddLit(buf, "(type netfront)");
+ }
+ else {
+ if (def->model != NULL) {
+ virBufferEscapeSexpr(buf, "(model '%s')", def->model);
+ }
+ /*
+ * 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)");
+ }
+ }
}
if (!isAttach)
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index d65e97aa9..93a26f90d 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -1381,20 +1381,21 @@ static int xenFormatXMNet(virConnectPtr conn,
if (net->model != NULL)
virBufferAsprintf(&buf, ",model=%s", net->model);
}
- else if (net->model == NULL) {
- /*
- * 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");
- }
- else if (STREQ(net->model, "netfront")) {
- virBufferAddLit(&buf, ",type=netfront");
- }
else {
- virBufferAsprintf(&buf, ",model=%s", net->model);
- virBufferAddLit(&buf, ",type=ioemu");
+ if (net->model != NULL && STREQ(net->model, "netfront")) {
+ virBufferAddLit(&buf, ",type=netfront");
+ }
+ else {
+ if (net->model != NULL)
+ virBufferAsprintf(&buf, ",model=%s", net->model);
+
+ /*
+ * 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");
+ }
}
if (net->ifname)