我通过以下方式设置 WiFi 芯片的 MAC 地址:
/sbin/ifconfig wlan0 down
/sbin/ifconfig wlan0 hw ether ${WIFI_MAC_ADDR}
/sbin/ifconfig wlan0 up
假设默认 mac 地址是 98:00:00:00:00:00。如果我将 mac 地址更改为任何仍以 开头的新地址98
,则不会出现问题。
但是,如果我将其更改98
为任何其他数字,则会出现以下错误:
wlan0: set cur_etheraddr failed
dhd_sysioc_thread _dhd_set_mac_address() failed
为什么?
答案1
第一个八位字节的最低有效位保留为“组位”(多播/广播标志位)。设置了该位的 MAC 地址不是有效的单播地址,因此不能用作 NIC 的 MAC 地址。
因此,在 0x8 的半字节中,这些(偶数)值是合法的:
0x0
0x2
0x4
0x6
0x8
0xa
0xc
0xe
这些(奇数)值是非法的:
0x1
0x3
0x5
0x7
0x9
0xb
0xd
0xf