[Libvirt] Attach qemu commands to an running xml domain

Michal Privoznik mprivozn at redhat.com
Wed Mar 31 12:11:40 UTC 2021


On 3/31/21 1:36 PM, Daniel P. Berrangé wrote:
> On Wed, Mar 31, 2021 at 01:09:32PM +0200, Michal Privoznik wrote:
>> 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.
> 
> If it is possible to specify a ovs db.socket path in the XML, then
> why can't this path simply be bind mounted to the right location
> in the first place.

Because then you'd override the path for system wide OVS. I mean, by 
default the socket is under /var/run/openvswitch/db.sock and if you have 
another OVS running inside a container you can expose it under 
/prefix/var/run/openvswitch/db.sock. ovs-vsctl allows this by --db=$path 
argument.

Michal




More information about the libvir-list mailing list