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

i40e/ice driver: ping ipv6 failed inside guest when two vfs add to ovs bridge

    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given that two VFs of an ice/i40e NIC are attached to an OVS bridge,

      When two virtual machines are launched and configured to use these VFs with both IPv4 and IPv6 addresses,

      Then the VMs must be able to successfully send and receive both IPv4 and IPv6 traffic between each other without packet loss.

      Show
      Given that two VFs of an ice/i40e NIC are attached to an OVS bridge, When two virtual machines are launched and configured to use these VFs with both IPv4 and IPv6 addresses, Then the VMs must be able to successfully send and receive both IPv4 and IPv6 traffic between each other without packet loss.
    • rhel-sst-network-fastdatapath-ovsdpdk
    • ssg_networking

      Description of problem:

      Version-Release number of selected component (if applicable):
      5.14.0-427.el9.x86_64
      openvswitch2.17-2.17.0-126.el9fdp.x86_64

      openvswitch3.2-3.2.0-40.el9fdp

      How reproducible:

      Steps to Reproduce:
      #create two vfs for enp4s0f0
      6: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
          link/ether 3c:fd:fe:ad:bf:c4 brd ff:ff:ff:ff:ff:ff
          vf 0     link/ether 52:54:00:11:8f:e9 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
          vf 1     link/ether 52:54:00:11:8f:e8 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
      #create ovs bridge and add the two vfs to the ovsbr0
      ovs-vsctl add-br ovsbr0
      ovs-vsctl add-port ovsbr0 enp4s0f0v0
      ovs-vsctl add-port ovsbr0 enp4s0f0v1
      #start two guests, master4 and master5

      [root@dell-per730-53 ~]# virsh dumpxml master4
      <domain type='kvm' id='1'>
        <name>master4</name>
        <uuid>37425e76-af6a-44a6-aba0-73434afe34c2</uuid>
        <memory unit='KiB'>8388608</memory>
        <currentMemory unit='KiB'>8388608</currentMemory>
        <memoryBacking>
          <hugepages>
            <page size='1048576' unit='KiB' nodeset='0'/>
          </hugepages>
          <access mode='shared'/>
        </memoryBacking>
        <vcpu placement='static'>3</vcpu>
        <cputune>
          <vcpupin vcpu='0' cpuset='0'/>
          <vcpupin vcpu='1' cpuset='1'/>
          <vcpupin vcpu='2' cpuset='2'/>
          <emulatorpin cpuset='1'/>
        </cputune>
        <resource>
          <partition>/machine</partition>
        </resource>
        <os>
          <type arch='x86_64' machine='pc-q35-rhel9.4.0'>hvm</type>
          <boot dev='hd'/>
        </os>
        <features>
          <acpi/>
          <apic/>
        </features>
        <cpu mode='host-passthrough' check='none' migratable='on'>
          <feature policy='require' name='tsc-deadline'/>
          <numa>
            <cell id='0' cpus='0-2' memory='8388608' 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/master4.qcow2' index='1'/>
            <backingStore/>
            <target dev='vda' bus='virtio'/>
            <alias name='virtio-disk0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
          </disk>
          <controller type='usb' index='0' model='ich9-ehci1'>
            <alias name='usb'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci1'>
            <alias name='usb'/>
            <master startport='0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci2'>
            <alias name='usb'/>
            <master startport='2'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci3'>
            <alias name='usb'/>
            <master startport='4'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
          </controller>
          <controller type='pci' index='0' model='pcie-root'>
            <alias name='pcie.0'/>
          </controller>
          <controller type='virtio-serial' index='0'>
            <alias name='virtio-serial0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
          </controller>
          <controller type='sata' index='0'>
            <alias name='ide'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
          </controller>
          <interface type='bridge'>
            <mac address='52:54:00:11:8f:e9'/>
            <source bridge='ovsbr0'/>
            <virtualport type='openvswitch'>
              <parameters interfaceid='f54fd445-25b0-4231-8ea7-b83f2a1f8df2'/>
            </virtualport>
            <target dev='tap0'/>
            <model type='virtio'/>
            <alias name='net0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
          </interface>
          <interface type='bridge'>
            <mac address='52:54:00:bb:63:7b'/>
            <source bridge='virbr0'/>
            <target dev='vnet0'/>
            <model type='virtio'/>
            <alias name='net1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 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/1-master4/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='tablet' bus='usb'>
            <alias name='input0'/>
            <address type='usb' bus='0' port='1'/>
          </input>
          <input type='mouse' bus='ps2'>
            <alias name='input1'/>
          </input>
          <input type='keyboard' bus='ps2'>
            <alias name='input2'/>
          </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='cirrus' vram='16384' heads='1' primary='yes'/>
            <alias name='video0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
          </video>
          <watchdog model='itco' action='reset'>
            <alias name='watchdog0'/>
          </watchdog>
          <memballoon model='virtio'>
            <alias name='balloon0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
          </memballoon>
        </devices>
        <seclabel type='dynamic' model='selinux' relabel='yes'>
          <label>system_u:system_r:svirt_t:s0:c331,c1021</label>
          <imagelabel>system_u:object_r:svirt_image_t:s0:c331,c1021</imagelabel>
        </seclabel>
        <seclabel type='dynamic' model='dac' relabel='yes'>
          <label>+107:+984</label>
          <imagelabel>+107:+984</imagelabel>
        </seclabel>
      </domain> 
      [root@dell-per730-53 ~]# virsh dumpxml master5
      <domain type='kvm' id='2'>
        <name>master5</name>
        <uuid>37425e76-af6a-44a6-aba0-73434afe34c3</uuid>
        <memory unit='KiB'>8388608</memory>
        <currentMemory unit='KiB'>8388608</currentMemory>
        <memoryBacking>
          <hugepages>
            <page size='1048576' unit='KiB' nodeset='0'/>
          </hugepages>
          <access mode='shared'/>
        </memoryBacking>
        <vcpu placement='static'>3</vcpu>
        <cputune>
          <vcpupin vcpu='0' cpuset='3'/>
          <vcpupin vcpu='1' cpuset='4'/>
          <vcpupin vcpu='2' cpuset='5'/>
          <emulatorpin cpuset='6'/>
        </cputune>
        <resource>
          <partition>/machine</partition>
        </resource>
        <os>
          <type arch='x86_64' machine='pc-q35-rhel9.4.0'>hvm</type>
          <boot dev='hd'/>
        </os>
        <features>
          <acpi/>
          <apic/>
        </features>
        <cpu mode='host-passthrough' check='none' migratable='on'>
          <feature policy='require' name='tsc-deadline'/>
          <numa>
            <cell id='0' cpus='0-2' memory='8388608' 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/master5.qcow2' index='1'/>
            <backingStore/>
            <target dev='vda' bus='virtio'/>
            <alias name='virtio-disk0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
          </disk>
          <controller type='usb' index='0' model='ich9-ehci1'>
            <alias name='usb'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci1'>
            <alias name='usb'/>
            <master startport='0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci2'>
            <alias name='usb'/>
            <master startport='2'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
          </controller>
          <controller type='usb' index='0' model='ich9-uhci3'>
            <alias name='usb'/>
            <master startport='4'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
          </controller>
          <controller type='pci' index='0' model='pcie-root'>
            <alias name='pcie.0'/>
          </controller>
          <controller type='virtio-serial' index='0'>
            <alias name='virtio-serial0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
          </controller>
          <controller type='sata' index='0'>
            <alias name='ide'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
          </controller>
          <interface type='bridge'>
            <mac address='52:54:00:11:8f:e8'/>
            <source bridge='ovsbr0'/>
            <virtualport type='openvswitch'>
              <parameters interfaceid='f54fd445-25b0-4231-8ea7-b83f2a1f8df2'/>
            </virtualport>
            <target dev='tap1'/>
            <model type='virtio'/>
            <alias name='net0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
          </interface>
          <interface type='bridge'>
            <mac address='52:54:00:bb:63:7a'/>
            <source bridge='virbr0'/>
            <target dev='vnet1'/>
            <model type='virtio'/>
            <alias name='net1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
          </interface>
          <serial type='pty'>
            <source path='/dev/pts/1'/>
            <target type='isa-serial' port='0'>
              <model name='isa-serial'/>
            </target>
            <alias name='serial0'/>
          </serial>
          <console type='pty' tty='/dev/pts/1'>
            <source path='/dev/pts/1'/>
            <target type='serial' port='0'/>
            <alias name='serial0'/>
          </console>
          <channel type='unix'>
            <source mode='bind' path='/run/libvirt/qemu/channel/2-master5/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='tablet' bus='usb'>
            <alias name='input0'/>
            <address type='usb' bus='0' port='1'/>
          </input>
          <input type='mouse' bus='ps2'>
            <alias name='input1'/>
          </input>
          <input type='keyboard' bus='ps2'>
            <alias name='input2'/>
          </input>
          <graphics type='vnc' port='5901' autoport='yes' listen='0.0.0.0'>
            <listen type='address' address='0.0.0.0'/>
          </graphics>
          <audio id='1' type='none'/>
          <video>
            <model type='cirrus' vram='16384' heads='1' primary='yes'/>
            <alias name='video0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
          </video>
          <watchdog model='itco' action='reset'>
            <alias name='watchdog0'/>
          </watchdog>
          <memballoon model='virtio'>
            <alias name='balloon0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
          </memballoon>
        </devices>
        <seclabel type='dynamic' model='selinux' relabel='yes'>
          <label>system_u:system_r:svirt_t:s0:c27,c681</label>
          <imagelabel>system_u:object_r:svirt_image_t:s0:c27,c681</imagelabel>
        </seclabel>
        <seclabel type='dynamic' model='dac' relabel='yes'>
          <label>+107:+984</label>
          <imagelabel>+107:+984</imagelabel>
        </seclabel>
      </domain> 

      #create the open flows.
       ovs-ofctl del-flows ovsbr0
       ovs-ofctl add-flow ovsbr0 in_port=enp4s0f0v0,actions=output:tap0
       ovs-ofctl add-flow ovsbr0 in_port=enp4s0f0v1,actions=output:tap1
       ovs-ofctl add-flow ovsbr0 in_port=tap0,actions=output:enp4s0f0v0
       ovs-ofctl add-flow ovsbr0 in_port=tap1,actions=output:enp4s0f0v1
      [root@dell-per730-53 ~]# ovs-ofctl dump-flows ovsbr0
       cookie=0x0, duration=48188.475s, table=0, n_packets=6117, n_bytes=2032804, in_port=enp4s0f0v0 actions=output:tap0
       cookie=0x0, duration=48188.471s, table=0, n_packets=6047, n_bytes=2013054, in_port=enp4s0f0v1 actions=output:tap1
       cookie=0x0, duration=48188.468s, table=0, n_packets=14358442, n_bytes=21016444996, in_port=tap0 actions=output:enp4s0f0v0
       cookie=0x0, duration=48188.464s, table=0, n_packets=20731160, n_bytes=30344415124, in_port=tap1 actions=output:enp4s0f0v1

       #inside master5, configure the ipv4 and ipv6 address
       [root@dell-per730-53 ~]# virsh console master5
      Connected to domain 'master5'
      Escape character is ^] (Ctrl + ])

      [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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:bb:63:7a brd ff:ff:ff:ff:ff:ff
          inet 192.168.122.137/24 brd 192.168.122.255 scope global dynamic noprefixroute enp0s3
             valid_lft 2295sec preferred_lft 2295sec
          inet6 fe80::a258:86b1:da2d:91da/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:11:8f:e8 brd ff:ff:ff:ff:ff:ff
          inet 20.0.0.3/24 scope global enp0s9
             valid_lft forever preferred_lft forever
          inet6 2001:5c0:9168::3/64 scope global 
             valid_lft forever preferred_lft forever

      #inside master4, configure the ipv4 and ipv6 address
      [root@dell-per730-53 ~]# virsh console master4
      Connected to domain 'master4'
      Escape character is ^] (Ctrl + ])

      [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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:bb:63:7b brd ff:ff:ff:ff:ff:ff
          inet 192.168.122.138/24 brd 192.168.122.255 scope global dynamic noprefixroute enp0s3
             valid_lft 2005sec preferred_lft 2005sec
          inet6 fe80::ff7c:5368:4979:55f6/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:11:8f:e9 brd ff:ff:ff:ff:ff:ff
          inet 20.0.0.2/24 scope global enp0s9
             valid_lft forever preferred_lft forever
          inet6 2001:5c0:9168::2/64 scope global 
             valid_lft forever preferred_lft forever

       #inside guest5, ping the ipv4 and ipv6 of guest4
       [root@localhost ~]# ping 20.0.0.2
      PING 20.0.0.2 (20.0.0.2) 56(84) bytes of data.
      64 bytes from 20.0.0.2: icmp_seq=1 ttl=64 time=0.238 ms
      64 bytes from 20.0.0.2: icmp_seq=2 ttl=64 time=0.099 ms

      — 20.0.0.2 ping statistics —
      2 packets transmitted, 2 received, 0% packet loss, time 1001ms
      rtt min/avg/max/mdev = 0.099/0.168/0.238/0.069 ms
      [root@localhost ~]# ping6 2001:5c0:9168::2
      PING 2001:5c0:9168::2(2001:5c0:9168::2) 56 data bytes
      From 2001:5c0:9168::3 icmp_seq=1 Destination unreachable: Address unreachable
      From 2001:5c0:9168::3 icmp_seq=2 Destination unreachable: Address unreachable
      From 2001:5c0:9168::3 icmp_seq=3 Destination unreachable: Address unreachable

      — 2001:5c0:9168::2 ping statistics —
      4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3060ms

      Actual results:
      It can ping ipv4 address successfully, but ping ipv6 address failed

      It exist on ice, i40e driver.

      Expected results:
      It can ping ipv6 address successfully.

              ktraynor@redhat.com Kevin Traynor (Inactive)
              tli@redhat.com Ting Li
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: