[libvirt] how to assign an ip when assign a NIC or VF to the Virtual Machine?

Laine Stump laine at laine.org
Tue May 10 15:44:02 UTC 2011


>
> 2011/5/8 Richard W.M. Jones <rjones at redhat.com <mailto:rjones at redhat.com>>
>
>     On Sun, May 08, 2011 at 10:56:54AM +0800, guan qin wrote:
>     > The second solution you mentioned may be difficult , because
>     when I assign
>     > the ethX to the VM, the X in the 'ethX' is random (the  'X' in
>     the host may
>     > be different in the VM),I don't know it before I boot the VM .
>     so maybe I
>     > couldn't edit the guest correctly before booting VM.
>
>     AFAIK the guest should always see "eth0", so this shouldn't be any
>     problem.  If not, write udev rule(s) in the guest to force the name to
>     be stable.
>
>     > The first solution :
>     > The network card's MAC address I can know and assign an fixed  IP in
>     > advance, but for the VFs , before I create the VF by "modprobe
>     > igb/ixgbe
>     > max_vfs=num1,num2" ,I couldn't know the MAC address before
>     either,the MAC
>     > address generated randomly too.
>     > So maybe I should edit the DHCP server configure file after
>     creating the
>     > VFs.
>
>     It seems that for SR-IOV, MAC addresses are assigned to VFs randomly
>     by the kernel.  It should be possible to read out the VF using (eg)
>     libvirt before the VM has booted (if not, it would be a bug).  I think
>     you can also assign fixed MAC addresses to VFs in advance if that
>     would be simpler.  However I've not really used SR-IOV in anger so
>     this may be wrong.
>

On 05/08/2011 10:35 AM, guan qin wrote:
> If I use SR-IOV, the guest may be  always "eth0"   , but when I use 
> the VT-d ,I often got an  ethX with a random X in VM.
> AFAIK, udev make the NIC name be stable by the MAC address. So when I 
> haven't assigned a VF or NetworkCard to the VM,
> how can I force the name in the guest to 'eth0' ?

(Please don't top-quote. It makes it hard to follow the discussion later).

As I understand it (and I may have it wrong, as I don't actually have 
any SRIOV hardware to play with), an SRIOV VF gets a different random 
MAC address each time the host boots. However, udev on the host 
apparently ignores VFs when saving off its mac address <--> ethX mapping 
for reference on subsequent boots, so the VFs as seen from the host will 
have a stable name (but unstable mac address).

When you map that VF through to the guest, the guest probably doesn't 
know that it's a VF of an SRIOV card, it thinks it's a standard ethernet 
card, so the guest's udev saves that particular MAC address<->ethX 
mapping for subsequent boots; the problem is that the next time it 
boots, it will get *yet another* mac address, which will be mapped to 
*yet another* ethX name.

The solution is to clear out the udev mapping on the guest before each 
boot, or otherwise teach it to not save the mapping. Alternately, use a 
different method of attaching your guest to the network (ie, instead of 
using PCI Passthrough, use <interface type='direct'> to attach a guest 
interface to one of the VFs, and give the guest a fixed MAC address of 
your own choosing.)




More information about the libvir-list mailing list