diff options
author | Sean Bruno <sbruno@FreeBSD.org> | 2016-11-07 22:24:37 +0000 |
---|---|---|
committer | Sean Bruno <sbruno@FreeBSD.org> | 2016-11-07 22:24:37 +0000 |
commit | 525e07418c7788fbf9ab63919a0eba57fbbb1d4e (patch) | |
tree | dfca4d48afefd13cdb5b80fa7ad931557f586d1e /sys/dev/e1000 | |
parent | aabc5ce043340c18d7bc7f7ca956724c66583625 (diff) | |
download | src-525e07418c7788fbf9ab63919a0eba57fbbb1d4e.tar.gz src-525e07418c7788fbf9ab63919a0eba57fbbb1d4e.zip |
The igb driver currently requires a VF interface to have a non-zero MAC
address, but the associated PF is giving the VF an all zeros MAC address
when one is not administratively assigned. The driver should check for
this case and generate a random address, similar to how the linux igbvf
driver does.
Submitted by: skoumjian@juniper.net (Scott Koumjian)
MFH: 2 weeks
Differential Revision: https://reviews.freebsd.org/D8399
Notes
Notes:
svn path=/head/; revision=308429
Diffstat (limited to 'sys/dev/e1000')
-rw-r--r-- | sys/dev/e1000/if_igb.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index 8e018995029e..3c9644d9b03b 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -590,11 +590,20 @@ igb_attach(device_t dev) error = EIO; goto err_late; } - /* Check its sanity */ - if (!igb_is_valid_ether_addr(adapter->hw.mac.addr)) { - device_printf(dev, "Invalid MAC address\n"); - error = EIO; - goto err_late; + + /* Check its sanity */ + if (!igb_is_valid_ether_addr(adapter->hw.mac.addr)) { + if (adapter->vf_ifp) { + u8 addr[ETHER_ADDR_LEN]; + arc4rand(&addr, sizeof(addr), 0); + addr[0] &= 0xFE; + addr[0] |= 0x02; + bcopy(addr, adapter->hw.mac.addr, sizeof(addr)); + } else { + device_printf(dev, "Invalid MAC address\n"); + error = EIO; + goto err_late; + } } /* Setup OS specific network interface */ |