From 1f343ca2d34c0bd5f012079ab07a7c1cc9bf0fe4 Mon Sep 17 00:00:00 2001 Message-Id: <1f343ca2d34c0bd5f012079ab07a7c1cc9bf0fe4@dist-git> From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Wed, 17 Sep 2014 19:15:58 +0200 Subject: [PATCH] conf: add backend element to interfaces https://bugzilla.redhat.com/show_bug.cgi?id=1139362 For tuning the network, alternative devices for creating tap and vhost devices can be specified via: (cherry picked from commit af8b4a2e6fc264dda4c7fda9b1696a16e59caeb4) Signed-off-by: Jiri Denemark --- docs/formatdomain.html.in | 20 +++++++++ docs/schemas/domaincommon.rng | 10 +++++ src/conf/domain_conf.c | 11 +++++ src/conf/domain_conf.h | 4 ++ tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml | 52 +++++++++++++++++++++++ tests/qemuxml2xmltest.c | 2 + 6 files changed, 99 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index ade40f3..a3ab5cf 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3956,6 +3956,26 @@ qemu-kvm -net nic,model=? /dev/null +
Setting network backend-specific options
+ +
+  ...
+  <devices>
+    <interface type='network'>
+      <source network='default'/>
+      <target dev='vnet1'/>
+      <model type='virtio'/>
+      <backend tap='/dev/net/tun' vhost='/dev/net-vhost'/>
+      <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'/>
+    </interface>
+  </devices>
+  ...
+ +

+ For tuning the backend of the network, the backend element + can be used. Supported attributes are tap and vhost, + allowing to override the default devices for creating tap and vhost devices. +

Overriding the target element
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 75006f5..31974ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2335,6 +2335,16 @@
         
       
       
+        
+           
+             
+           
+           
+             
+           
+        
+      
+      
         
           
             
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ea727a1..7d78b0b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1412,6 +1412,8 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
         break;
     }
 
+    VIR_FREE(def->backend.tap);
+    VIR_FREE(def->backend.vhost);
     VIR_FREE(def->virtPortProfile);
     VIR_FREE(def->script);
     VIR_FREE(def->ifname);
@@ -7033,6 +7035,9 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
             } else if (xmlStrEqual(cur->name, BAD_CAST "vlan")) {
                 if (virNetDevVlanParse(cur, ctxt, &def->vlan) < 0)
                     goto error;
+            } else if (xmlStrEqual(cur->name, BAD_CAST "backend")) {
+                def->backend.tap = virXMLPropString(cur, "tap");
+                def->backend.vhost = virXMLPropString(cur, "vhost");
             }
         }
         cur = cur->next;
@@ -16550,6 +16555,12 @@ virDomainNetDefFormat(virBufferPtr buf,
             virBufferAddLit(buf, "/>\n");
         }
     }
+    if (def->backend.tap || def->backend.vhost) {
+        virBufferAddLit(buf, "backend.tap);
+        virBufferEscapeString(buf, " vhost='%s'", def->backend.vhost);
+        virBufferAddLit(buf, "/>\n");
+    }
     if (def->filter) {
         if (virNWFilterFormatParamAttributes(buf, def->filterparams,
                                              def->filter) < 0)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 3316fb6..c93b73c 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -897,6 +897,10 @@ struct _virDomainNetDef {
             unsigned int queues; /* Multiqueue virtio-net */
         } virtio;
     } driver;
+    struct {
+        char *tap;
+        char *vhost;
+    } backend;
     union {
         struct {
             char *dev;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml b/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml
new file mode 100644
index 0000000..3237c6a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml
@@ -0,0 +1,52 @@
+
+  test
+  bba65c0e-c049-934f-b6aa-4e2c0582acdf
+  1048576
+  1048576
+  1
+  
+    hvm
+    
+    
+    
+  
+  
+  destroy
+  restart
+  restart
+  
+    /usr/bin/qemu
+    
+      
+      
+      
+      
+ + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 180665b..1e06f38 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -399,6 +399,8 @@ mymain(void) DO_TEST("bios-nvram"); + DO_TEST("tap-vhost"); + virObjectUnref(driver.caps); virObjectUnref(driver.xmlopt); -- 2.1.0