conf: add backend element to interfaces

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'/>
This commit is contained in:
Ján Tomko 2014-09-11 17:11:28 +02:00
parent 0ece766bd2
commit af8b4a2e6f
6 changed files with 99 additions and 0 deletions

View 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>

View File

@ -2346,6 +2346,16 @@
<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>

View 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)

View 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;

View File

@ -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>

View File

@ -399,6 +399,8 @@ mymain(void)
DO_TEST("bios-nvram");
DO_TEST("tap-vhost");
virObjectUnref(driver.caps);
virObjectUnref(driver.xmlopt);