Uploaded image for project: 'Fast Datapath Product'
  1. Fast Datapath Product
  2. FDP-3182

Test Coverage: The vhostuser corresponding guest interface shows NO-CARRIER when change userspace-tso-enable from true to false

    • False
    • False
    • Hide

      ( ) The test coverage is aligned with the epic's acceptance criteria

      Show
      ( ) The test coverage is aligned with the epic's acceptance criteria
    • rhel-9
    • None

      This task is tracking the test case writing activities to cover the bug described below.

       Problem Description: Clearly explain the issue.

       

       Impact Assessment: Describe the severity and impact (e.g., network down,availability of a workaround, etc.).

       

       Software Versions: Specify the exact versions in use (e.g.,openvswitch3.1-3.1.0-147.el8fdp).

      [root@dell-per740-57 ~]# rpm -qa|grep openvs
      openvswitch-selinux-extra-policy-1.0-39.el9fdp.noarch
      openvswitch3.7-3.7.0-0.1.el9fdp.x86_64

      The issue also exist on ovs3.5.
       

        Issue Type: Indicate whether this is a new issue or a regression (if a regression, state the last known working version).

       

       Reproducibility: Confirm if the issue can be reproduced consistently. If not, describe how often it occurs.

      The vhostuser corresponding guest interface shows NO-CARRIER when change userspace-tso-enable from true to false
       

       Reproduction Steps: Provide detailed steps or scripts to replicate the issue.

      ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init="true"
      ovs-vsctl --no-wait set Open_vSwitch . other_config:userspace-tso-enable="true"
      ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x8000008000000000800000800000
      ovs-vsctl add-br ovsbr1 – set bridge ovsbr1 datapath_type=netdev
      ovs-vsctl add-port ovsbr1 vhost0 – set Interface vhost0 type=dpdkvhostuserclient options:vhost-server-path=/tmp/dpdkvhostuserclient0
      #start guest with following xml

      [root@dell-per760-22 ~]# virsh dumpxml g1
      <domain type='kvm' id='2'>
        <name>g1</name>
        <uuid>ae256d67-d4cc-4e9d-8d25-66ac92e17f53</uuid>
        <memory unit='KiB'>4194304</memory>
        <currentMemory unit='KiB'>4194304</currentMemory>
        <memoryBacking>
          <hugepages>
            <page size='1048576' unit='KiB'/>
          </hugepages>
          <locked/>
          <access mode='shared'/>
        </memoryBacking>
        <vcpu placement='static'>3</vcpu>
        <cputune>
          <vcpupin vcpu='0' cpuset='1'/>
          <vcpupin vcpu='1' cpuset='15'/>
          <vcpupin vcpu='2' cpuset='31'/>
          <emulatorpin cpuset='3'/>
        </cputune>
        <numatune>
          <memory mode='strict' nodeset='1'/>
        </numatune>
        <resource>
          <partition>/machine</partition>
        </resource>
        <os>
          <type arch='x86_64' machine='pc-q35-rhel9.6.0'>hvm</type>
          <boot dev='hd'/>
        </os>
        <features>
          <acpi/>
          <apic/>
          <pmu state='off'/>
          <vmport state='off'/>
          <ioapic driver='qemu'/>
        </features>
        <cpu mode='host-passthrough' check='none' migratable='on'>
          <feature policy='require' name='tsc-deadline'/>
          <numa>
            <cell id='0' cpus='0-2' memory='4194304' unit='KiB' memAccess='shared'/>
          </numa>
        </cpu>
        <clock offset='utc'>
          <timer name='rtc' tickpolicy='catchup'/>
          <timer name='pit' tickpolicy='delay'/>
          <timer name='hpet' present='no'/>
        </clock>
        <on_poweroff>destroy</on_poweroff>
        <on_reboot>restart</on_reboot>
        <on_crash>restart</on_crash>
        <pm>
          <suspend-to-mem enabled='no'/>
          <suspend-to-disk enabled='no'/>
        </pm>
        <devices>
          <emulator>/usr/libexec/qemu-kvm</emulator>
          <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='/var/lib/libvirt/images/g1.qcow2' index='1'/>
            <backingStore/>
            <target dev='vda' bus='virtio'/>
            <alias name='virtio-disk0'/>
            <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
          </disk>
          <controller type='usb' index='0' model='none'/>
          <controller type='pci' index='0' model='pcie-root'>
            <alias name='pcie.0'/>
          </controller>
          <controller type='pci' index='1' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='1' port='0x10'/>
            <alias name='pci.1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
          </controller>
          <controller type='pci' index='2' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='2' port='0x11'/>
            <alias name='pci.2'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
          </controller>
          <controller type='pci' index='3' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='3' port='0x8'/>
            <alias name='pci.3'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
          </controller>
          <controller type='pci' index='4' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='4' port='0x9'/>
            <alias name='pci.4'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
          </controller>
          <controller type='pci' index='5' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='5' port='0xa'/>
            <alias name='pci.5'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
          </controller>
          <controller type='pci' index='6' model='pcie-root-port'>
            <model name='pcie-root-port'/>
            <target chassis='6' port='0xb'/>
            <alias name='pci.6'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
          </controller>
          <controller type='sata' index='0'>
            <alias name='ide'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
          </controller>
          <controller type='virtio-serial' index='0'>
            <alias name='virtio-serial0'/>
            <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
          </controller>
          <interface type='bridge'>
            <mac address='52:54:00:00:00:11'/>
            <source bridge='virbr0'/>
            <target dev='vnet0'/>
            <model type='virtio'/>
            <alias name='net0'/>
            <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
          </interface>
          <interface type='vhostuser'>
            <mac address='52:54:00:d3:0f:66'/>
            <source type='unix' path='/tmp/dpdkvhostuserclient0' mode='server'/>
            <target dev='vhost0'/>
            <model type='virtio'/>
            <driver name='vhost'/>
            <alias name='net1'/>
            <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
          </interface>
          <serial type='pty'>
            <source path='/dev/pts/0'/>
            <target type='isa-serial' port='0'>
              <model name='isa-serial'/>
            </target>
            <alias name='serial0'/>
          </serial>
          <console type='pty' tty='/dev/pts/0'>
            <source path='/dev/pts/0'/>
            <target type='serial' port='0'/>
            <alias name='serial0'/>
          </console>
          <channel type='unix'>
            <source mode='bind' path='/run/libvirt/qemu/channel/2-g1/org.qemu.guest_agent.0'/>
            <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
            <alias name='channel0'/>
            <address type='virtio-serial' controller='0' bus='0' port='1'/>
          </channel>
          <input type='mouse' bus='ps2'>
            <alias name='input0'/>
          </input>
          <input type='keyboard' bus='ps2'>
            <alias name='input1'/>
          </input>
          <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
            <listen type='address' address='0.0.0.0'/>
          </graphics>
          <audio id='1' type='none'/>
          <video>
            <model type='virtio' vram='16384' heads='1' primary='yes'/>
            <alias name='video0'/>
            <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
          </video>
          <watchdog model='itco' action='reset'>
            <alias name='watchdog0'/>
          </watchdog>
          <memballoon model='virtio'>
            <alias name='balloon0'/>
            <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
          </memballoon>
          <iommu model='intel'>
            <driver intremap='on' caching_mode='on' iotlb='on'/>
            <alias name='iommu0'/>
          </iommu>
        </devices>
        <seclabel type='none' model='selinux'/>
        <seclabel type='dynamic' model='dac' relabel='yes'>
          <label>+107:+987</label>
          <imagelabel>+107:+987</imagelabel>
        </seclabel>
      </domain>
      

      virsh console g1 and check the enp3s0 is up.

      [root@localhost ~]# ip a
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:00:00:11 brd ff:ff:ff:ff:ff:ff
          inet 192.168.122.43/24 brd 192.168.122.255 scope global dynamic noprefixroute enp2s0
             valid_lft 3236sec preferred_lft 3236sec
          inet6 fe80::d11b:d16d:9c56:3bb5/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:d3:0f:66 brd ff:ff:ff:ff:ff:ff
          inet 192.168.101.1/24 scope global enp3s0
             valid_lft forever preferred_lft forever
          inet6 2001:db8:4::1/64 scope global 
             valid_lft forever preferred_lft forever
      
      

       
      #change the tso from true to false
      ovs-vsctl --no-wait set Open_vSwitch . other_config:userspace-tso-enable=false
      #restart ovs service
      systemctl restart openvswitch
      #check the enp3s0 port in guest. it change to the NO-CARRIER.

      [root@localhost ~]# ip a
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:00:00:11 brd ff:ff:ff:ff:ff:ff
          inet 192.168.122.43/24 brd 192.168.122.255 scope global dynamic noprefixroute enp2s0
             valid_lft 3190sec preferred_lft 3190sec
          inet6 fe80::dd32:1f27:9fb5:edb0/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      3: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
          link/ether 52:54:00:d3:0f:46 brd ff:ff:ff:ff:ff:ff
      
      

       Expected Behavior: Describe what should happen under normal circumstances.

       

       Observed Behavior: Explain what actually happens.

      The port inside guest change to NO-CARRIER when change the tso setting from true to false. If run reboot command in the guest, the port still is NO-CARRIER.
      The guest’s port will only come up after running virsh destroy g1 and then virsh start g1.
      The port inside guest still up when change the tso setting from false to true.
       

       Troubleshooting Actions: Outline the steps taken to diagnose or resolve the issue so far.

       

       Logs: If you collected logs please provide them (e.g. sos report, /var/log/openvswitch/* , testpmd console)

      The ovs reconnect log:

      [root@dell-per740-57 ~]# cat ovs.log |grep dpdkvhostuserclient0
      2026-02-11T04:28:05.764Z|3035114|netdev_dpdk|INFO|vHost User device 'vhost0' created in 'client' mode, using client socket '/tmp/dpdkvhostuserclient0'
      2026-02-11T04:28:05.764Z|609967|netdev_dpdk|INFO|vHost Device '/tmp/dpdkvhostuserclient0' connection has been destroyed
      2026-02-11T04:28:05.764Z|3035119|netdev_dpdk|INFO|vHost User device 'vhost0' created in 'client' mode, using client socket '/tmp/dpdkvhostuserclient0'
      2026-02-11T04:28:05.764Z|609968|netdev_dpdk|INFO|vHost Device '/tmp/dpdkvhostuserclient0' connection has been destroyed
      2026-02-11T04:28:05.764Z|3035124|netdev_dpdk|INFO|vHost User device 'vhost0' created in 'client' mode, using client socket '/tmp/dpdkvhostuserclient0'
      2026-02-11T04:28:05.764Z|609969|netdev_dpdk|INFO|vHost Device '/tmp/dpdkvhostuserclient0' connection has been destroyed
      2026-02-11T04:28:05.764Z|3035129|netdev_dpdk|INFO|vHost User device 'vhost0' created in 'client' mode, using client socket '/tmp/dpdkvhostuserclient0'
      2026-02-11T04:28:05.764Z|609970|netdev_dpdk|INFO|vHost Device '/tmp/dpdkvhostuserclient0' connection has been destroyed
      2026-02-11T04:28:05.764Z|3035134|netdev_dpdk|INFO|vHost User device 'vhost0' created in 'client' mode, using client socket '/tmp/dpdkvhostuserclient0'
      2026-02-11T04:28:05.765Z|609971|netdev_dpdk|INFO|vHost Device '/tmp/dpdkvhostuserclient0' connection has been destroyed
      
      

              ovs-qe Openvswtich Quality Engineering Bot
              tli@redhat.com Ting Li
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: