[libvirt] [PATCH 13/17] conf: parse/format type='hostdev' network interfaces

Michal Privoznik mprivozn at redhat.com
Mon Mar 5 20:45:37 UTC 2012


On 28.02.2012 21:14, Laine Stump wrote:
> This is the new interface type that sets up a PCI/USB network device
> to be assigned to the guest with PCI/USB 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='0'/>
>     </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 0 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.
> 
> Although it's not expected to be used very much, usb network hostdevs
> are also supported for completeness. <source> syntax is identical to
> that for plain <hostdev> devices, except that the <address> element
> should have "type='usb'" added if it's 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>
> ---
> V2: address Eric's concerns from V1
>  - check for OOM after strdup
>  - put in a NOP virDomainHostdevDefClear() rather than just commenting
>    "there is nothing in the HostdevDef that needs to be freed"
>  - eliminate inconsistent {} usage.
> 
>  docs/formatdomain.html.in                          |   41 +++++
>  docs/schemas/domaincommon.rng                      |   50 +++++++
>  src/conf/domain_conf.c                             |  154 ++++++++++++++++++--
>  src/conf/domain_conf.h                             |   10 ++
>  src/libvirt_private.syms                           |    1 +
>  src/qemu/qemu_command.c                            |    1 +
>  src/uml/uml_conf.c                                 |    5 +
>  src/xenxs/xen_sxpr.c                               |    1 +
>  .../qemuxml2argvdata/qemuxml2argv-net-hostdev.xml  |   48 ++++++
>  tests/qemuxml2xmltest.c                            |    1 +
>  10 files changed, 297 insertions(+), 15 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.xml
> 

> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.xml b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.xml
> new file mode 100644
> index 0000000..504e4f6
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-hostdev.xml
> @@ -0,0 +1,48 @@
> +<domain type='qemu'>
> +  <name>QEMUGuest1</name>
> +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> +  <memory>219136</memory>
> +  <currentMemory>219136</currentMemory>
> +  <vcpu>1</vcpu>
> +  <os>
> +    <type arch='i686' machine='pc'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu</emulator>
> +    <disk type='block' device='disk'>
> +      <source dev='/dev/HostVG/QEMUGuest1'/>
> +      <target dev='hda' bus='ide'/>
> +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> +    </disk>
> +    <controller type='usb' index='0'/>
> +    <controller type='ide' index='0'/>
> +    <interface type='hostdev' managed='yes'>
> +      <mac address='00:11:22:33:44:55'/>
> +      <source>
> +        <address type='pci' domain='0x0002' bus='0x03' slot='0x07' function='0x1'/>
> +      </source>
> +      <virtualport type='802.1Qbg'>
> +        <parameters managerid='11' typeid='1193047' typeidversion='2' instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
> +      </virtualport>
> +    </interface>
> +    <interface type='hostdev'>
> +      <mac address='11:11:22:33:44:55'/>
> +      <source>
> +        <address type='usb' bus='0' device='2'/>
> +      </source>
> +    </interface>
> +    <interface type='hostdev'>
> +      <mac address='22:11:22:33:44:55'/>
> +      <source>
> +        <vendor id='0x0012'/>
> +        <product id='0x24dd'/>
> +      </source>
> +    </interface>

This looks odd to me; I mean why add this <interface> here but remove it
in the very next patch? Maybe to prove/test that parsing and formatting
works correctly even for this case.

ACK

Michal




More information about the libvir-list mailing list