model = NULL;
}
- if ((backend != NULL) &&
- (def->model && STREQ(def->model, "virtio"))) {
- int b;
- if (((b = virDomainNetBackendTypeFromString(backend)) < 0) ||
- (b == VIR_DOMAIN_NET_BACKEND_TYPE_DEFAULT)) {
- virDomainReportError(VIR_ERR_INTERNAL_ERROR,
- _("Unknown interface <driver name='%s'> "
- "has been specified"),
- backend);
- goto error;
+ if (def->model && STREQ(def->model, "virtio")) {
+ if (backend != NULL) {
+ int name;
+ if (((name = virDomainNetBackendTypeFromString(backend)) < 0) ||
+ (name == VIR_DOMAIN_NET_BACKEND_TYPE_DEFAULT)) {
+ virDomainReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Unknown interface <driver name='%s'> "
+ "has been specified"),
+ backend);
+ goto error;
+ }
+ def->driver.virtio.name = name;
}
- def->backend = b;
}
+
if (filter != NULL) {
switch (def->type) {
case VIR_DOMAIN_NET_TYPE_ETHERNET:
if (def->model) {
virBufferEscapeString(buf, " <model type='%s'/>\n",
def->model);
- if (STREQ(def->model, "virtio") && def->backend) {
- virBufferVSprintf(buf, " <driver name='%s'/>\n",
- virDomainNetBackendTypeToString(def->backend));
+ if (STREQ(def->model, "virtio") &&
+ def->driver.virtio.name) {
+ virBufferAddLit(buf, " <driver");
+ if (def->driver.virtio.name) {
+ virBufferVSprintf(buf, " name='%s'",
+ virDomainNetBackendTypeToString(def->driver.virtio.name));
+ }
+ virBufferAddLit(buf, "/>\n");
}
}
if (def->filter) {
*vhostfd = -1; /* assume we won't use vhost */
/* If the config says explicitly to not use vhost, return now */
- if (net->backend == VIR_DOMAIN_NET_BACKEND_TYPE_QEMU) {
+ if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_QEMU) {
return 0;
}
if (!(qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HOST &&
qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV &&
qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
- if (net->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) {
+ if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) {
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("vhost-net is not supported with "
"this QEMU binary"));
/* If the nic model isn't virtio, don't try to open. */
if (!(net->model && STREQ(net->model, "virtio"))) {
- if (net->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) {
+ if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) {
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("vhost-net is only supported for "
"virtio network interfaces"));
* report an error.
*/
if ((*vhostfd < 0) &&
- (net->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST)) {
+ (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST)) {
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("vhost-net was requested for an interface, "
"but is unavailable"));
values[i] = NULL;
} else if (STREQ(keywords[i], "vhost")) {
if ((values[i] == NULL) || STREQ(values[i], "on")) {
- def->backend = VIR_DOMAIN_NET_BACKEND_TYPE_VHOST;
+ def->driver.virtio.name = VIR_DOMAIN_NET_BACKEND_TYPE_VHOST;
} else if (STREQ(keywords[i], "off")) {
- def->backend = VIR_DOMAIN_NET_BACKEND_TYPE_QEMU;
+ def->driver.virtio.name = VIR_DOMAIN_NET_BACKEND_TYPE_QEMU;
}
} else if (STREQ(keywords[i], "sndbuf") && values[i]) {
if (virStrToLong_ul(values[i], NULL, 10, &def->tune.sndbuf) < 0) {