[Libvirt] Attach qemu commands to an running xml domain

Michal Privoznik mprivozn at redhat.com
Wed Mar 31 11:09:32 UTC 2021


On 3/30/21 11:35 AM, Waleed Musa wrote:
> Hi all,
> 
> I see in libvirt you are supporting attach/detach devices to existing 
> xml domain using *attachDeviceFlags *and *detachDeviceFlags *APIs.
> Now we are adding some qemu command to the xml domain related to some 
> interfaces using alias names before starting the VM, but we will face an 
> issue with hot plug such devices, so I have two question here:
> 
>  1. Is it applicable to set the alias names for interfaces because I saw
>     it's ignored when I add it to xml domain before starting the VM?
>  2. Is there a way or API to attach qemu commands to running domain as
>     you are doing in attaching the device using *attachDeviceFlags?*
> 
> *Example of my xml*
> *<domain type='kvm' id='5' 
> xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
> *
> *  <devices>
> *
>      <interface type='vhostuser'>
>        <mac address='fa:16:3e:ac:12:4c'/>
>        <source type='unix' 
> path='/var/lib/vhost_sockets/sockbbb6bbe9-eb5' mode='server'/>
>        <target dev='tapbbb6bbe9-eb'/>
>        <model type='virtio'/>
>        <driver queues='4' rx_queue_size='512' tx_queue_size='512'/>
>        <alias name='net0'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 
> function='0x0'/>
>      </interface>
> *  </devices>
> *
> *  <qemu:commandline>*
>      <qemu:arg value='-set'/>
>      <qemu:arg value='device.net0.page-per-vq=on'/>
>      <qemu:arg value='-set'/>
>      <qemu:arg value='device.net0.host_mtu=8942'/>
> *  </qemu:commandline>*
> *</domain>*

Is this perhaps related to the following bug?

"interface type='vhostuser' libvirtError: Cannot set interface MTU"
https://bugzilla.redhat.com/show_bug.cgi?id=1940559

Are you trying to work around it? I am discussing with Moshe how libvirt 
can help, but honestly, I don't like the solution I proposed.

Long story short, the interface is in different container (among with 
OVS bridge) and thus when we query ovs-vsctl it connects to the system 
one and doesn't find that interface. What I proposed was to allow 
specifying path to ovs db.socket but this would need to be done o per 
domain basis.

What I particularly don't like about this solution is that while it may 
fix this one use case, it opens the gate for whole lot of other 
requests. For instance, consider if other interfaces of other types live 
in different network namespace. "Hey, I want to use eth0 from that 
namespace, but run QEMU in another one".

Also, we don't really like exposing paths in libvirt XML unless necessary.

Michal




More information about the libvir-list mailing list