Bug 2103526

Summary: Update the interface trustGuestRxFilters and backend setting return succeed but no changes
Product: Red Hat Enterprise Linux 9 Reporter: yalzhang <yalzhang>
Component: libvirtAssignee: Virtualization Maintenance <virt-maint>
libvirt sub component: General QA Contact: yalzhang <yalzhang>
Status: CLOSED MIGRATED Docs Contact:
Severity: low    
Priority: low CC: pkrempa, virt-maint
Version: 9.1Keywords: MigratedToJIRA, Triaged
Target Milestone: rcFlags: pm-rhel: mirror+
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-07-07 19:20:55 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description yalzhang@redhat.com 2022-07-04 01:43:23 UTC
Description of problem:
Update the interface trustGuestRxFilters and backend setting return succeed but no changes

Version-Release number of selected component (if applicable):
libvirt-8.5.0-1.el9.x86_64

How reproducible:
100%

Steps to Reproduce:
1. Start a vm with direct type interface as below:
# virsh start vm2
Domain 'vm2' started
# virsh dumpxml vm2 | grep /interface -B7
    <interface type='direct' trustGuestRxFilters='yes'>
      <mac address='52:54:00:65:52:cb'/>
      <source dev='eno2' mode='bridge'/>
      <target dev='macvtap0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
2. update the trustGuestRxFilters setting from "yes" to "no" by update-device:
# cat direct.xml
 <interface type='direct' trustGuestRxFilters='no'>
      <mac address='52:54:00:65:52:cb'/>
      <source dev='eno2' mode='bridge'/>
      <target dev='macvtap0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
# virsh update-device vm2 direct.xml
Device updated successfully

3. the update-device command succeed, but the live xml do not changes:
# virsh dumpxml vm2 | grep /interface -B7
    <interface type='direct' trustGuestRxFilters='yes'>
      <mac address='52:54:00:65:52:cb'/>
      <source dev='eno2' mode='bridge'/>
      <target dev='macvtap0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

Another scenario for backend:
# virsh dumpxml vm2 | grep /interface -B8
    <interface type='network'>
      <mac address='52:54:00:cf:af:c6'/>
      <source network='default' portid='1c06f82e-fa6c-4de9-9cac-8973b1db1eec' bridge='virbr0'/>
      <target dev='vnet1'/>
      <model type='virtio'/>
      <backend tap='/dev/net/tun' vhost='/dev/vhost-net'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
# cat backend.xml
 <interface type='network'>
      <mac address='52:54:00:cf:af:c6'/>
      <source network='default' portid='1c06f82e-fa6c-4de9-9cac-8973b1db1eec' bridge='virbr0'/>
      <target dev='vnet1'/>
      <model type='virtio'/>
      <backend tap='/dev/net/tun1' vhost='/dev/vhost-net2'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
# virsh update-device vm2 backend.xml
Device updated successfully
# virsh dumpxml vm2 | grep backend
      <backend tap='/dev/net/tun' vhost='/dev/vhost-net'/>

Actual results:
Use update-device to update trustGuestRxFilters attribute or backend elements, the command returns succeed, but the live xml does not update accordingly.

Expected results:
libvirt should return unsupported error if such elements can not be live updated

Additional info: