On Tue, Feb 23, 2016 at 03:13:21PM +0000, Jay Turner wrote:
As a follow-up to this, I made some headway in sorting out the source
of
the issue, but hoping someone can give me a pointer to where this is
happening in the code, as well as some understanding for why.
In oVirt, when I allocate a virtual function to a guest, a new MAC address
is generated for the VF (as it should be) from the MAC address pool in
oVirt, and then that MAC address is written to the VF on the hypervisor.
Thus I end up with something like:
: ens11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master i40e
state UP mode DEFAULT qlen 1000
link/ether 3c:fd:fe:9d:a1:38 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:1a:4a:16:01:52, spoof checking on, link-state auto
This *is not* how it happens under libvirt/virt-manager, however. When
allocating a VF to a guest under libvirt, a random MAC address is generated
and associated with the VF under the guest, but it is not written back to
the hypervisor, and is instead left as 00:00:00:00:00:00.
I am pretty sure this writing of the MAC address at the hypervisor is
causing at least some of the issues I'm seeing, as with the Intel cards,
that prevents the guest from changing/adding a new MAC address, which is
what happens with the instantiation of a macvlan interface.
So can anyone point me to where in the oVirt code this MAC address
assignment is occurring?
https://gerrit.ovirt.org/gitweb?p=vdsm.git;a=blob;f=vdsm/virt/vmdevices/n...
Also curious why oVirt does this assignment, but
libvirt does not.
When we start a VM, we want it to see its allocated mac address,
regardless of the specific VF that was assigned to it. It would surprise
me if virt-manager does not do that, hence I'd love to see the
<interface> elemet that it creates for the VF.
Regards,
Dan.