[libvirt] libvirt VF indexing issue

Niilona niilona at gmail.com
Thu Oct 17 09:43:12 UTC 2013


libvirt points to wrong VF -channel, when trying to change MAC -address.

libvirt v1 1.0.2
linux driver : ixgbe 3.17.3

Symptom description
----------------------------------


1.) How the VF channels are seen in the Host ( correct in increasing
address order )

command : ls -la  /sys/bus/pci/devices/0000\:04\:00.0/
..................

lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn0 -> ../0000:04:10.0/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn1 -> ../0000:04:10.2/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn10 -> ../0000:04:12.4/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn11 -> ../0000:04:12.6/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn12 -> ../0000:04:13.0/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn13 -> ../0000:04:13.2/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn2 -> ../0000:04:10.4/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn3 -> ../0000:04:10.6/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn4 -> ../0000:04:11.0/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn5 -> ../0000:04:11.2/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn6 -> ../0000:04:11.4/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn7 -> ../0000:04:11.6/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn8 -> ../0000:04:12.0/
lrwxrwxrwx  1 root root      0 Oct 17 12:25 virtfn9 -> ../0000:04:12.2/

-----------------------

2.) How the libvirt sees them

virsh nodedev-dumpxml pci_0000_04_00_0
<device>
  <name>pci_0000_04_00_0</name>
  <parent>pci_0000_00_03_0</parent>
  <driver>
    <name>ixgbe</name>
  </driver>
  <capability type='pci'>
    <domain>0</domain>
    <bus>4</bus>
    <slot>0</slot>
    <function>0</function>
    <product id='0x10fb'>82599EB 10-Gigabit SFI/SFP+ Network
Connection</product>
    <vendor id='0x8086'>Intel Corporation</vendor>
    <capability type='virt_functions'>
      <address domain='0x0000' bus='0x04' slot='0x12' function='0x4'/>
      <address domain='0x0000' bus='0x04' slot='0x12' function='0x6'/>
      <address domain='0x0000' bus='0x04' slot='0x13' function='0x0'/>
      <address domain='0x0000' bus='0x04' slot='0x13' function='0x2'/>
      <address domain='0x0000' bus='0x04' slot='0x10' function='0x0'/>
      <address domain='0x0000' bus='0x04' slot='0x10' function='0x2'/>
      <address domain='0x0000' bus='0x04' slot='0x10' function='0x4'/>
      <address domain='0x0000' bus='0x04' slot='0x10' function='0x6'/>
      <address domain='0x0000' bus='0x04' slot='0x11' function='0x0'/>
      <address domain='0x0000' bus='0x04' slot='0x11' function='0x2'/>
      <address domain='0x0000' bus='0x04' slot='0x11' function='0x4'/>
      <address domain='0x0000' bus='0x04' slot='0x11' function='0x6'/>
      <address domain='0x0000' bus='0x04' slot='0x12' function='0x0'/>
      <address domain='0x0000' bus='0x04' slot='0x12' function='0x2'/>
    </capability>
  </capability>
</device>

3.) Libvirt sets MAC -address in slot/position 5 instead of 1

ip link show eth10
87: eth10: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 2100 qdisc mq
state UP mode DEFAULT qlen 1000
    link/ether 00:1b:21:b9:a5:60 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 92:e2:6b:53:a7:c2, spoof checking off <------ this is the
slot, MAC tried to set
    vf 1 MAC 0a:04:38:2c:79:35, spoof checking off
    vf 2 MAC b2:46:b6:91:44:2e, spoof checking off
    vf 3 MAC de:b6:28:da:20:44, spoof checking off
    vf 4 MAC 02:00:00:80:00:01, spoof checking off <--------- MAC sets
in wrong slot
    vf 5 MAC 02:00:00:80:00:02, spoof checking off
    vf 6 MAC 02:00:00:80:00:20, spoof checking off
    vf 7 MAC 02:00:00:80:00:30, spoof checking off
    vf 8 MAC 52:54:00:de:f8:08, spoof checking off
    vf 9 MAC 5e:b0:d0:34:d6:cc, spoof checking off
    vf 10 MAC d2:88:5c:2d:db:b5, spoof checking off
    vf 11 MAC 6a:06:8a:9c:31:8b, spoof checking off
    vf 12 MAC 4a:38:be:8f:b3:bf, spoof checking off
    vf 13 MAC b6:c1:d4:12:d3:3d, spoof checking off

5.) Question : Why this happens in ixgbe -driver and when we try to
use more than 10 VF's/physical port. ?




More information about the libvir-list mailing list