|
|
9119d9 |
From dfe7fcd67e7c3cb13f6c2080ff5ce4829da5b4e5 Mon Sep 17 00:00:00 2001
|
|
|
9119d9 |
Message-Id: <dfe7fcd67e7c3cb13f6c2080ff5ce4829da5b4e5@dist-git>
|
|
|
9119d9 |
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
|
|
9119d9 |
Date: Wed, 24 Sep 2014 16:55:42 +0200
|
|
|
9119d9 |
Subject: [PATCH] conf: split out virtio net driver formatting
|
|
|
9119d9 |
|
|
|
9119d9 |
https://bugzilla.redhat.com/show_bug.cgi?id=1139364
|
|
|
9119d9 |
|
|
|
9119d9 |
Instead of checking upfront if the <driver> element will be needed
|
|
|
9119d9 |
in a big condition, just format all the attributes into a string
|
|
|
9119d9 |
and output the <driver> element if the string is not empty.
|
|
|
9119d9 |
|
|
|
9119d9 |
(cherry picked from commit fb78d1cee7ff6bafff80a58be3ff7710488d55ad)
|
|
|
9119d9 |
|
|
|
9119d9 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
9119d9 |
---
|
|
|
9119d9 |
src/conf/domain_conf.c | 68 ++++++++++++++++++++++++++++++++------------------
|
|
|
9119d9 |
1 file changed, 44 insertions(+), 24 deletions(-)
|
|
|
9119d9 |
|
|
|
9119d9 |
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
|
|
9119d9 |
index a5f3c1d..306843b 100644
|
|
|
9119d9 |
--- a/src/conf/domain_conf.c
|
|
|
9119d9 |
+++ b/src/conf/domain_conf.c
|
|
|
9119d9 |
@@ -16446,6 +16446,41 @@ virDomainActualNetDefFormat(virBufferPtr buf,
|
|
|
9119d9 |
return 0;
|
|
|
9119d9 |
}
|
|
|
9119d9 |
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+static int
|
|
|
9119d9 |
+virDomainVirtioNetDriverFormat(char **outstr,
|
|
|
9119d9 |
+ virDomainNetDefPtr def)
|
|
|
9119d9 |
+{
|
|
|
9119d9 |
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
|
|
|
9119d9 |
+ if (def->driver.virtio.name) {
|
|
|
9119d9 |
+ virBufferAsprintf(&buf, "name='%s' ",
|
|
|
9119d9 |
+ virDomainNetBackendTypeToString(def->driver.virtio.name));
|
|
|
9119d9 |
+ }
|
|
|
9119d9 |
+ if (def->driver.virtio.txmode) {
|
|
|
9119d9 |
+ virBufferAsprintf(&buf, "txmode='%s' ",
|
|
|
9119d9 |
+ virDomainNetVirtioTxModeTypeToString(def->driver.virtio.txmode));
|
|
|
9119d9 |
+ }
|
|
|
9119d9 |
+ if (def->driver.virtio.ioeventfd) {
|
|
|
9119d9 |
+ virBufferAsprintf(&buf, "ioeventfd='%s' ",
|
|
|
9119d9 |
+ virTristateSwitchTypeToString(def->driver.virtio.ioeventfd));
|
|
|
9119d9 |
+ }
|
|
|
9119d9 |
+ if (def->driver.virtio.event_idx) {
|
|
|
9119d9 |
+ virBufferAsprintf(&buf, "event_idx='%s' ",
|
|
|
9119d9 |
+ virTristateSwitchTypeToString(def->driver.virtio.event_idx));
|
|
|
9119d9 |
+ }
|
|
|
9119d9 |
+ if (def->driver.virtio.queues)
|
|
|
9119d9 |
+ virBufferAsprintf(&buf, "queues='%u' ", def->driver.virtio.queues);
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+ virBufferTrim(&buf, " ", -1);
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+ if (virBufferCheckError(&buf) < 0)
|
|
|
9119d9 |
+ return -1;
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+ *outstr = virBufferContentAndReset(&buf;;
|
|
|
9119d9 |
+ return 0;
|
|
|
9119d9 |
+}
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+
|
|
|
9119d9 |
int
|
|
|
9119d9 |
virDomainNetDefFormat(virBufferPtr buf,
|
|
|
9119d9 |
virDomainNetDefPtr def,
|
|
|
9119d9 |
@@ -16621,30 +16656,15 @@ virDomainNetDefFormat(virBufferPtr buf,
|
|
|
9119d9 |
if (def->model) {
|
|
|
9119d9 |
virBufferEscapeString(buf, "<model type='%s'/>\n",
|
|
|
9119d9 |
def->model);
|
|
|
9119d9 |
- if (STREQ(def->model, "virtio") &&
|
|
|
9119d9 |
- (def->driver.virtio.name || def->driver.virtio.txmode ||
|
|
|
9119d9 |
- def->driver.virtio.ioeventfd || def->driver.virtio.event_idx ||
|
|
|
9119d9 |
- def->driver.virtio.queues)) {
|
|
|
9119d9 |
- virBufferAddLit(buf, "
|
|
|
9119d9 |
- if (def->driver.virtio.name) {
|
|
|
9119d9 |
- virBufferAsprintf(buf, " name='%s'",
|
|
|
9119d9 |
- virDomainNetBackendTypeToString(def->driver.virtio.name));
|
|
|
9119d9 |
- }
|
|
|
9119d9 |
- if (def->driver.virtio.txmode) {
|
|
|
9119d9 |
- virBufferAsprintf(buf, " txmode='%s'",
|
|
|
9119d9 |
- virDomainNetVirtioTxModeTypeToString(def->driver.virtio.txmode));
|
|
|
9119d9 |
- }
|
|
|
9119d9 |
- if (def->driver.virtio.ioeventfd) {
|
|
|
9119d9 |
- virBufferAsprintf(buf, " ioeventfd='%s'",
|
|
|
9119d9 |
- virTristateSwitchTypeToString(def->driver.virtio.ioeventfd));
|
|
|
9119d9 |
- }
|
|
|
9119d9 |
- if (def->driver.virtio.event_idx) {
|
|
|
9119d9 |
- virBufferAsprintf(buf, " event_idx='%s'",
|
|
|
9119d9 |
- virTristateSwitchTypeToString(def->driver.virtio.event_idx));
|
|
|
9119d9 |
- }
|
|
|
9119d9 |
- if (def->driver.virtio.queues)
|
|
|
9119d9 |
- virBufferAsprintf(buf, " queues='%u'", def->driver.virtio.queues);
|
|
|
9119d9 |
- virBufferAddLit(buf, "/>\n");
|
|
|
9119d9 |
+ if (STREQ(def->model, "virtio")) {
|
|
|
9119d9 |
+ char *str;
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+ if (virDomainVirtioNetDriverFormat(&str, def) < 0)
|
|
|
9119d9 |
+ return -1;
|
|
|
9119d9 |
+
|
|
|
9119d9 |
+ if (str)
|
|
|
9119d9 |
+ virBufferAsprintf(buf, "<driver %s/>\n", str);
|
|
|
9119d9 |
+ VIR_FREE(str);
|
|
|
9119d9 |
}
|
|
|
9119d9 |
}
|
|
|
9119d9 |
if (def->backend.tap || def->backend.vhost) {
|
|
|
9119d9 |
--
|
|
|
9119d9 |
2.1.1
|
|
|
9119d9 |
|