[libvirt] <interface type='hostdev'>vf configuration cleanup when VM is delete

Laine Stump laine at laine.org
Tue Dec 15 18:34:29 UTC 2015


On 12/13/2015 10:51 AM, Moshe Levi wrote:
>
> Hi,
>
> I have a setup with libvirt 1.3.0 and OpenStack trunk.
>
> Before launched the VM ip link command show the following VF mac/vlan 
> configuration [1]
>
> When I launch a VM with <interface type='hostdev'> via openstack api 
> (OpenStack direct port)
>
> I can see that the VF get the mac/vlan according to libvrit xml [2] 
> and ip link command  [3], but when I delete the VM the mac/vlan config 
> are still shown as in [3] and not restored to [1]
>
> Shouldn’t  libvirt restore the mac/vlan to [1].
>
> The same problem exists when using <interface type='direct'> 
> (OpenStack macvtap port)  but just for the MAC configuration of the VF.
>

What libvirt does is to restore the MAC address to whatever it was 
before we set it up for use with a guest. Although there are some sriov 
net drivers that (for some unfathomable reason) think it's cool to 
assign a random MAC address to each VF at boot time, the "normal" thing 
is for the VFs to have a MAC address of all 0's to start with. So 
libvirt should be saving 00:00:00:00:00:00 (it will be in the file 
/var/run/libvirt/hostdevmgr/$ifname_vf$vfnum) then setting the MAC to 
use; when done, libvirt will read the 00:00:00:00:00:00 and use netlink 
to set the MAC address, but this is apparently failing.

I checked on my Fedora 22 system with the igb driver, and found that if 
the MAC address was originally set to something other than 0's, it was 
restored properly by libvirt, but if it was set to all 0's originally, 
the attempt to set it back to 0 would fail.

I then tried doing the same thing with the "ip" utility:

     # ip link set dev p4p2 vf 0 mac 00:00:00:00:00:00

and I get the following response:

     RTNETLINK answers: Invalid argument

So it appears that either the kernel or the NIC driver is refusing to 
set the MAC address to all 0's. I'm reasonably certain this is a 
regression in the kernel, although I can't say how long it's been there, 
as I don't normally pay attention to this (and as I said, many SRIOV NIC 
drivers don't default their VFs to 0 MAC addresses)

What distro and kernel are you using for your tests?


> [1]  - 24: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc 
> mq master ovs-system state UP mode DEFAULT group default qlen 1000
>
>     link/ether e4:1d:2d:a5:f1:22 brd ff:ff:ff:ff:ff:ff
>
>     vf 0 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
> [2] - <interface type='hostdev' managed='yes'>
>
>   <mac address=' fa:16:3e:11:af:fe '/>
>
>   <driver name='kvm'/>
>
>   <source>
>
>     <address type='pci' domain='0x0000' bus='0x02' slot='0x00' 
> function='0x7'/>
>
>   </source>
>
>   <vlan>
>
>     <tag id='190'/>
>
>   </vlan>
>
>   <alias name='hostdev0'/>
>
>   <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
> function='0x0'/>
>
> </interface>
>
> [3] 24: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq 
> master ovs-system state UP mode DEFAULT group default qlen 1000
>
>     link/ether e4:1d:2d:a5:f1:22 brd ff:ff:ff:ff:ff:ff
>
>     vf 0 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
>
>     vf 3 MAC fa:16:3e:11:af:fe, vlan 190, spoof checking off, 
> link-state enable
>
>
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
F15
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151215/800d279a/attachment-0001.htm>


More information about the libvir-list mailing list