[libvirt] Different mac address used in libvirtd

Laine Stump laine at laine.org
Thu Jul 19 18:57:55 UTC 2012


(slowly working through libvir-list backlog from when I was on vacation...)

On 06/29/2012 11:53 AM, Daniel P. Berrange wrote:
> On Wed, Jun 20, 2012 at 07:01:17PM +0800, Yong Sheng Gong wrote:
>> Hi,
>> I found libvirtd will create vnet0 with a different mac other than the one defined in domain file. The mac in Domain file will be used by qemu-kvm.
>> I want to know how libvirtd decides the mac for vnet0, Who can give me a hint about the location of the libvirtd codes which does this work?
>>
>> I cannot find how the libvirtd translates the mac from one defined in domain file to vnet0's one in src/util/bridge.c: brSetInterfaceMac()
>>     <interface type='bridge'>
>>       <mac address='fa:16:3e:28:64:c2'/>
>>       <source bridge='br100'/>
>>       <target dev='vnet0'/>
>>       <filterref filter='nova-instance-instance-00000002-fa163e2864c2'>
>>         <parameter name='DHCPSERVER' value='10.0.1.1'/>
>>         <parameter name='PROJNET' value='10.0.1.0'/>
>>         <parameter name='PROJMASK' value='255.255.255.0'/>
>>         <parameter name='IP' value='10.0.1.2'/>
>>       </filterref>
>>       <alias name='net0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>>     </interface>
> The XML mac address config, sets the MAC address for the *guest*
> NIC, ie what the guest uses as its eth0.
>
>
>
>> [root at robinlinux eclipsecdt]# ifconfig  vnet0
>> vnet0     Link encap:Ethernet  HWaddr FE:16:3E:28:64:C2  
>>           inet6 addr: fe80::fc16:3eff:fe28:64c2/64 Scope:Link
>>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>           RX packets:553 errors:0 dropped:0 overruns:0 frame:0
>>           TX packets:1485 errors:0 dropped:0 overruns:0 carrier:0
>>           collisions:0 txqueuelen:500 
>>           RX bytes:136360 (133.1 KiB)  TX bytes:280590 (274.0 KiB)
> vnet0 is the backend of the guest NIC, and its MAC addr
> is more or less irrelevant to functioning of the guest
> itself, since traffic does not originate on this NIC.

Actually there is one way that the MAC address of the tap device affects
proper operation of guest networking - if you happen to set the tap
device's MAC identical to the MAC used by the guest, you will get errors
from the kernel similar to this:


  kernel: vnet9: received packet with own address as source address

There was a bug filed about this (someone tried to set their guest's MAC
address to start with 0xFE):

      https://bugzilla.redhat.com/show_bug.cgi?id=798467

and a corresponding check was added to libvirt to prevent it from happening.

> The only important thing is that this TAP device must
> have a high value MAC address, to avoid the bridge
> device using the TAP device's MAC as its own. Hence
> when creating the TAP Device  libvirt takes the guest
> MAC addr and simply sets the top byte to 0xFE
>




More information about the libvir-list mailing list