how is the MAC for tap(4) computed?

Ian Lepore ian at FreeBSD.org
Tue Nov 5 22:18:34 UTC 2013


On Tue, 2013-11-05 at 10:24 -0800, John-Mark Gurney wrote:
> illoai at gmail.com wrote this message on Mon, Nov 04, 2013 at 16:08 -0500:
> > On 4 November 2013 12:09, Dan Nelson <dnelson at allantgroup.com> wrote:
> > > In the last episode (Nov 04), Aryeh Friedman said:
> > >> There seems to be a very high rate of MAC address collisions when tap is
> > >> running on different machines....  is there anyway to make the selection
> > >> of MAC more random
> > >
> > > It looks like it's generated based on the number of ticks since boot, plus
> > > the unit number of the tap device:
> > >
> > > http://fxr.watson.org/fxr/source/net/if_tap.c#L434
> > >
> > > So if you have devices created on boot on a bunch of machines, chances are
> > > high that you'll get conflicts.  Maybe instead of using the 'ticks' value,
> > > kern.hostid could be used instead?  That has much better randomness than
> > > 'ticks'.
> > 
> > With physical interfaces you can use something like
> > ifconfig ath0 ether 00:2d:44:88:ff:00
> > (assuming the device & the driver support changing MAC
> > addresses)
> > 
> > I've never tried it with a virtual interface, but it should work if the
> > device supports it.
> 
> But remeber when choosing an address like that, that you set the second
> low bit of the first octect to one to designate that it's a locally
> administered address...
> 
> See wikipedia for more info:
> https://en.wikipedia.org/wiki/MAC_address#Address_details
> 

Several ethernet drivers for embedded systems have logic to cook up a
random address (probably it should be commonized somewhere) in which
they set the first 3 bytes to 'b','s','d' and the low bytes to a random
number.  The nifty thing about the value 62:73:64 (beside that it's bsd)
is that it sets the locally-administered bit in the address.

-- Ian



More information about the freebsd-stable mailing list