On Feb 5, 2014, at 3:33 , Kai Gallasch <k at free.de> wrote:

Am 05.02.2014 um 08:03 schrieb Craig Rodrigues:

I am running many BHyve VM's and am using tap interfaces
with a single bridge.  I am configuring the IP addresses
of these VM's via DHCP.

I need to have separate MAC addresses for each VM.

Can anyone recommend a range of MAC addresses to use?

I seem to recall that at the 2013 FreeBSD Vendor Summit in
Sunnyvale, California, that George mentioned that
there might be a Organizational Unique Identifier (OUI) for the FreeBSD
project that we can use for BHyve VM's.  Is that right?

If not, can people recommend a range of addresses to use?


Using "Search the Public MA-L Listing" with search term FreeBSD reveals..

--- snip ---

Here are the results of your search through the public section of the IEEE 
Standards OUI database report for freebsd:

 58-9C-FC   (hex)               FreeBSD
 589CFC     (base 16)           
                                P.O. Box 20247
                                Boulder CO  80308-3247
                                UNITED STATES
--- snap ---

Correct, that is an address that the Foundation has registered with the IEEE.

If you look at sys/net/ieee_oui.h you will see that I’ve allocated a range to 
bhyve already.

At work, we modified the bhyverun command to seed the hostname
of them machine running the hypervisor as part of the "generate a MAC
address" routine.  That means that for virtual machine "foo",
you now get different MACs on server "bar" and server "baz".
Without this patch, you're likely to get identical MAC addresses
for virtual machine "foo" on different servers.

I personally also have my virtual machines set bit 2 in
the first octet of the MAC address, so it falls into the
"locally administered" catagory of MAC addresses.  My gut feel
is that using the FreeBSD OUI bhyve range, *AND* setting the
locally administered bit in the MAC address is the way to go.


diff --git a/usr.sbin/bhyve/pci_virtio_net.c b/usr.sbin/bhyve/pci_virtio_net.c
--- a/usr.sbin/bhyve/pci_virtio_net.c
+++ b/usr.sbin/bhyve/pci_virtio_net.c
@@ -579,27 +579,36 @@ pci_vtnet_init(struct vmctx *ctx, struct
                                sc->vsc_tapfd = -1;
         * The default MAC address is the standard NetApp OUI of 00-a0-98,
-        * followed by an MD5 of the PCI slot/func number and dev name
+        * followed by an MD5 of the PCI slot/func number, hostname, and
+        * vmname.  The "locally administered" bit is also set in the
+        * resulting MAC address.
        if (!mac_provided) {
-               snprintf(nstr, sizeof(nstr), "%d-%d-%s", pi->pi_slot,
-                   pi->pi_func, vmname);
+               char hostname[MAXHOSTNAMELEN];
+               int rc;
+               rc = gethostname(hostname, sizeof hostname - 1);
+               if (rc < 0)
+                       hostname[0] = 0;
+               hostname[MAXHOSTNAMELEN-1] = 0;
+               snprintf(nstr, sizeof(nstr), "%d-%d-%s-%s", pi->pi_slot,
+                   pi->pi_func, hostname, vmname);
                MD5Update(&mdctx, nstr, strlen(nstr));
                MD5Final(digest, &mdctx);
-               sc->vsc_config.mac[0] = 0x00;
+               sc->vsc_config.mac[0] = 0x00 | 0x2; /* locally administered */
                sc->vsc_config.mac[1] = 0xa0;
                sc->vsc_config.mac[2] = 0x98;
                sc->vsc_config.mac[3] = digest[0];
                sc->vsc_config.mac[4] = digest[1];
                sc->vsc_config.mac[5] = digest[2];
        /* initialize config space */
freebsd-virtualization@freebsd.org mailing list
To unsubscribe, send any mail to 

Reply via email to