mirror of
https://github.com/libvirt/libvirt.git
synced 2026-07-30 08:08:11 -05:00
conf: parse/format type='hostdev' network interfaces
This is the new interface type that sets up an SR-IOV PCI network
device to be assigned to the guest with PCI passthrough after
initializing some network device-specific things from the config
(e.g. MAC address, virtualport profile parameters). Here is an example
of the syntax:
<interface type='hostdev' managed='yes'>
<source>
<address type='pci' domain='0' bus='0' slot='4' function='3'/>
</source>
<mac address='00:11:22:33:44:55'/>
<address type='pci' domain='0' bus='0' slot='7' function='0'/>
</interface>
This would assign the PCI card from bus 0 slot 4 function 3 on the
host, to bus 0 slot 7 function 0 on the guest, but would first set the
MAC address of the card to 00:11:22:33:44:55.
NB: The parser and formatter don't care if the PCI card being
specified is a standard single function network adapter, or a virtual
function (VF) of an SR-IOV capable network adapter, but the upcoming
code that implements the back end of this config will work *only* with
SR-IOV VFs. This is because modifying the mac address of a standard
network adapter prior to assigning it to a guest is pointless - part
of the device reset that occurs during that process will reset the MAC
address to the value programmed into the card's firmware.
Although it's not supported by any of libvirt's hypervisor drivers,
usb network hostdevs are also supported in the parser and formatter
for completeness and consistency. <source> syntax is identical to that
for plain <hostdev> devices, except that the <address> element should
have "type='usb'" added if bus/device are specified:
<interface type='hostdev'>
<source>
<address type='usb' bus='0' device='4'/>
</source>
<mac address='00:11:22:33:44:55'/>
</interface>
If the vendor/product form of usb specification is used, type='usb'
is implied:
<interface type='hostdev'>
<source>
<vendor id='0x0012'/>
<product id='0x24dd'/>
</source>
<mac address='00:11:22:33:44:55'/>
</interface>
Again, the upcoming patch to fill in the backend of this functionality
will log an error and fail with "Unsupported Config" if you actually
try to assign a USB network adapter to a guest using <interface
type='hostdev'> - just use a standard <hostdev> entry in that case
(and also for single-port PCI adapters).
This commit is contained in:
@@ -2303,6 +2303,55 @@
|
||||
...
|
||||
</pre>
|
||||
|
||||
|
||||
<h5><a name="elementsNICSHostdev">PCI Passthrough</a></h5>
|
||||
|
||||
<p>
|
||||
A PCI network device (specified by the <source> element)
|
||||
is directly assigned to the guest using generic device
|
||||
passthrough, after first optionally setting the device's MAC
|
||||
address to the configured value, and associating the device with
|
||||
an 802.1Qgh capable switch using an optionally specified
|
||||
%lt;virtualport%gt; element (see the examples of virtualport
|
||||
given above for type='direct' network devices). Note that - due
|
||||
to limitations in standard single-port PCI ethernet card driver
|
||||
design - only SR-IOV (Single Root I/O Virtualization) virtual
|
||||
function (VF) devices can be assigned in this manner; to assign
|
||||
a standard single-port PCI or PCIe ethernet card to a guest, use
|
||||
the traditional <hostdev> device definition and
|
||||
<span class="since">Since 0.9.11</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Note that this "intelligent passthrough" of network devices is
|
||||
very similar to the functionality of a standard <hostdev>
|
||||
device, the difference being that this method allows specifying
|
||||
a MAC address and <virtualport> for the passed-through
|
||||
device. If these capabilities are not required, if you have a
|
||||
standard single-port PCI, PCIe, or USB network card that doesn't
|
||||
support SR-IOV (and hence would anyway lose the configured MAC
|
||||
address during reset after being assigned to the guest domain),
|
||||
or if you are using a version of libvirt older than 0.9.11, you
|
||||
should use standard <hostdev> to assign the device to the
|
||||
guest instead of <interface type='hostdev'/>.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<devices>
|
||||
<interface type='hostdev'>
|
||||
<source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
||||
</source>
|
||||
<mac address='52:54:00:6d:90:02'>
|
||||
<virtualport type='802.1Qbh'>
|
||||
<parameters profileid='finance'/>
|
||||
</virtualport>
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
|
||||
|
||||
<h5><a name="elementsNICSMulticast">Multicast tunnel</a></h5>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -1416,6 +1416,56 @@
|
||||
</optional>
|
||||
</interleave>
|
||||
</group>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
<value>hostdev</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="managed">
|
||||
<choice>
|
||||
<value>yes</value>
|
||||
<value>no</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
<element name="source">
|
||||
<choice>
|
||||
<group>
|
||||
<ref name="usbproduct"/>
|
||||
<optional>
|
||||
<ref name="usbaddress"/>
|
||||
</optional>
|
||||
</group>
|
||||
<element name="address">
|
||||
<choice>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
<value>pci</value>
|
||||
</attribute>
|
||||
<ref name="pciaddress"/>
|
||||
</group>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
<value>usb</value>
|
||||
</attribute>
|
||||
<attribute name="bus">
|
||||
<ref name="usbAddr"/>
|
||||
</attribute>
|
||||
<attribute name="device">
|
||||
<ref name="usbPort"/>
|
||||
</attribute>
|
||||
</group>
|
||||
</choice>
|
||||
</element>
|
||||
</choice>
|
||||
</element>
|
||||
<optional>
|
||||
<ref name="virtualPortProfile"/>
|
||||
</optional>
|
||||
<ref name="interface-options"/>
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
Reference in New Issue
Block a user