Ubuntu libvirtError:XML错误:应为单播mac地址,找到多播

Ubuntu libvirtError:XML错误:应为单播mac地址,找到多播,ubuntu,networking,kvm,Ubuntu,Networking,Kvm,我正在通过ansible设置KVM自动化,我有一个VM不断给我这个错误: libvirtError:XML错误:应为单播mac地址,找到多播“53:54:00:b4:ad:81” 我认为这不是一个可以解决的问题,因为其他几个虚拟机工作得很好。我试过另一台主机,甚至把以前用过的MAC换成以前用过的和从未用过的。我只能说这不是一个多播mac地址,我不确定问题出在哪里,也不知道下一步该怎么办。如有任何建议,将不胜感激 这是我用来构建虚拟机的XML——基于构建所有其他虚拟机的相同模板(除了MAC地址、名

我正在通过ansible设置KVM自动化,我有一个VM不断给我这个错误:

libvirtError:XML错误:应为单播mac地址,找到多播“53:54:00:b4:ad:81”

我认为这不是一个可以解决的问题,因为其他几个虚拟机工作得很好。我试过另一台主机,甚至把以前用过的MAC换成以前用过的和从未用过的。我只能说这不是一个多播mac地址,我不确定问题出在哪里,也不知道下一步该怎么办。如有任何建议,将不胜感激

这是我用来构建虚拟机的XML——基于构建所有其他虚拟机的相同模板(除了MAC地址、名称等)


te01
8.
hvm
破坏
重新启动
重新启动
/usr/bin/kvm spice
我只能说这不是一个多播mac地址

但它实际上是一个多播地址,虽然不是IPv4多播到MAC多播(
01-00-5E-00-00-00
01-00-5E-7F-FF-FF
),IPv6多播到MAC多播(
33-33-00-00-00-00-00
33-33-FF-FF-FF-FF
),或者任何预定义的IEEE多播地址,例如STP、LLDP,等等

MAC地址的最高有效字节中有两个标志。最高有效字节的最低有效位是I/G(单个/组)标志。设置此位表示该地址用作组的目标地址。最高有效字节的第二个最低有效位是U/L(通用/本地)标志。设置该位意味着MAC地址是本地创建的;偏置(烧入地址)清除U/L位

设置了I/G位的任何MAC地址都是多播地址,广播MAC地址有一个特例(
ff ff ff ff
)。这意味着MAC地址最高有效字节中的任何奇数都是多播地址

多播地址只能是目标地址,不能是分配给接口的地址

您的MAC地址,
53:54:00:b4:ad:81
,具有I/G位集(表示它是多播(目标组)地址)和U/L位集(表示它是本地定义的MAC地址)

最高有效字节为0x53(
01010011
),因此设置了两个标志

0   1   0   1   0   0   1   1
                        ^   ^
                        |   |
                       U/L I/G
您创建的任何MAC地址(不包括您拥有的任何OUI)都应该设置U/L位,以表明您已经创建了它们,并且它们不会踩到其他公司拥有的OUI(不幸的是,许多组成自己MAC地址的人不会这样做,但实际上没有任何方法来强制执行)。接口地址必须清除I/G位,以防止它们成为多播(组目标)地址



人们经常会问,为什么标志是最高有效字节的两个最低有效位。这是因为位、字节和帧字段是在以太网上发送的。字节的最低有效位首先发送,帧的最高有效字节首先发送,帧的第一个字段是目标地址。另外,请记住以太网最初是在共享介质上的(就像现在的Wi-Fi),因此局域网上的所有主机都可以看到所有帧。主机接收到的第一位告诉看到帧的主机目标地址是个人地址还是组地址。

谢谢。这正是我需要的解释。原来我使用的所有其他mac地址都是从52开始的,而不是53,我没有注意到。谢谢你花时间写下这个答案+业力:)