]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: add backend element to interfaces
authorJán Tomko <jtomko@redhat.com>
Thu, 11 Sep 2014 15:11:28 +0000 (17:11 +0200)
committerJán Tomko <jtomko@redhat.com>
Tue, 16 Sep 2014 13:38:34 +0000 (15:38 +0200)
For tuning the network, alternative devices
for creating tap and vhost devices can be specified via:
<backend tap='/dev/net/tun' vhost='/dev/net-vhost'/>

docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
tests/qemuxml2argvdata/qemuxml2argv-tap-vhost.xml [new file with mode: 0644]
tests/qemuxml2xmltest.c

index 489cec892803d3a1b8061942c51e2b22dddea33e..d8206564aa770468cb940b6dfee8896ffd1e0735 100644 (file)
@@ -3969,6 +3969,26 @@ qemu-kvm -net nic,model=? /dev/null
       </dd>
     </dl>
 
+    <h5><a name="elementsBackendOptions">Setting network backend-specific options</a></h5>
+
+<pre>
+  ...
+  &lt;devices&gt;
+    &lt;interface type='network'&gt;
+      &lt;source network='default'/&gt;
+      &lt;target dev='vnet1'/&gt;
+      &lt;model type='virtio'/&gt;
+      <b>&lt;backend tap='/dev/net/tun' vhost='/dev/net-vhost'/&gt;</b>
+      &lt;driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'/&gt;
+    &lt;/interface&gt;
+  &lt;/devices&gt;
+  ...</pre>
+
+    <p>
+      For tuning the backend of the network, the <code>backend</code> element
+      can be used. Supported attributes are <code>tap</code> and <code>vhost</code>,
+      allowing to override the default devices for creating tap and vhost devices.
+    </p>
     <h5><a name="elementsNICSTargetOverride">Overriding the target element</a></h5>
 
 <pre>
index dd55a99d175e89935e61bc06c8fe04c98b913ce0..c600f2253e96c7d10874567de6b8b2db648ea8ad 100644 (file)
           <empty/>
         </element>
       </optional>
+      <optional>
+        <element name="backend">
+           <attribute name='tap'>
+             <ref name='absFilePath'/>
+           </attribute>
+           <attribute name='vhost'>
+             <ref name='absFilePath'/>
+           </attribute>
+        </element>
+      </optional>
       <optional>
         <element name="driver">
           <choice>
index 75811e5805b228d5fa3aa18d22a01c494b843b3e..3ccec1c7f0bcbd3fe3cb44dec52fdefeadb59944 100644 (file)
@@ -1415,6 +1415,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);
@@ -7049,6 +7051,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;
@@ -16700,6 +16705,12 @@ virDomainNetDefFormat(virBufferPtr buf,
             VIR_FREE(str);
         }
     }
+    if (def->backend.tap || def->backend.vhost) {
+        virBufferAddLit(buf, "<backend");
+        virBufferEscapeString(buf, " tap='%s'", def->backend.tap);
+        virBufferEscapeString(buf, " vhost='%s'", def->backend.vhost);
+        virBufferAddLit(buf, "/>\n");
+    }
     if (def->filter) {
         if (virNWFilterFormatParamAttributes(buf, def->filterparams,
                                              def->filter) < 0)
index 0862bd7e9b6150a0e0c8c665bb84aef29210fcfb..640a4c53017285a58da16bdf95b3ba7e6a2b163c 100644 (file)
@@ -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 (file)
index 0000000..3237c6a
--- /dev/null
@@ -0,0 +1,52 @@
+<domain type='qemu'>
+  <name>test</name>
+  <uuid>bba65c0e-c049-934f-b6aa-4e2c0582acdf</uuid>
+  <memory unit='KiB'>1048576</memory>
+  <currentMemory unit='KiB'>1048576</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc-0.13'>hvm</type>
+    <boot dev='cdrom'/>
+    <boot dev='hd'/>
+    <bootmenu enable='yes'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='qcow2' event_idx='on'/>
+      <source file='/var/lib/libvirt/images/f14.img'/>
+      <target dev='vda' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </disk>
+    <disk type='file' device='cdrom'>
+      <driver name='qemu' type='raw'/>
+      <source file='/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso'/>
+      <target dev='hdc' bus='ide'/>
+      <readonly/>
+      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='virtio-serial' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
+    </controller>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <interface type='user'>
+      <mac address='52:54:00:e5:48:58'/>
+      <model type='virtio'/>
+      <driver name='vhost' queues='5'/>
+      <backend tap='/dev/null' vhost='/dev/zero'/>
+    </interface>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <console type='pty'>
+      <target type='serial' port='0'/>
+    </console>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
index 195929145aa2f834e31e12f34416a770d6ea9acf..ead5d082e307928f0a600a4f4507087e13d028ff 100644 (file)
@@ -399,6 +399,8 @@ mymain(void)
 
     DO_TEST("bios-nvram");
 
+    DO_TEST("tap-vhost");
+
     virObjectUnref(driver.caps);
     virObjectUnref(driver.xmlopt);