我正在通过 ansible 设置 KVM 自动化,并且我有一个虚拟机一直给我这个错误:
libvirtError:XML 错误:预期的单播 mac 地址,发现多播 '53:54:00:b4:ad:81'
我不认为这是一个可靠的问题,因为其他几个虚拟机工作得很好。我尝试过另一台主机,甚至将使用的 MAC 更改为以前可用的主机和从未使用过的主机。我只能说这不是多播 MAC 地址,我不确定问题是什么或下一步该看哪里。任何建议,将不胜感激。
这是我用来构建 VM 的 XML - 基于构建所有其他 VM 的相同模板(MAC 地址、名称等除外)。
<domain type='kvm'>
<name>te01</name>
<cpu mode='host-passthrough'>
<topology sockets='1' cores='1' threads='1'/>
</cpu>
<memory unit='GiB'>8</memory>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/kvm-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback' discard='ignore' io='threads'/>
<source file='/images/te01.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<mac address='53:54:00:b4:ad:81'/>
<guest dev='ens3'/>
</interface>
<interface type='bridge'>
<source bridge='br502'/>
<guest dev='ens5'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/1'/>
<target type='isa-serial' port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/1'>
<source path='/dev/pts/1'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<graphics type='vnc' autoport='yes'>
<listen type='address' address='0.0.0.0'/>
</graphics>
</devices>
</domain>
我可以说这不是多播 mac 地址...
但它确实是一个多播地址,尽管不是 IPv4 多播到 MAC 多播的意义上(01-00-5E-00-00-00
通过01-00-5E-7F-FF-FF
)、IPv6 组播到 MAC 组播(33-33-00-00-00-00
通过33-33-FF-FF-FF-FF
),或任何预定义的 IEEE 多播地址,例如STP、LLDP 等。
MAC 地址的最高有效字节中有两个标志。最高有效字节的最低有效位是 I/G(个体/组)标志。设置该位意味着该地址用作组的目标地址。最高有效字节的第二最低有效位是 U/L(通用/本地)标志。设置该位表示该MAC地址是本地创建的; BIA(烧入地址)的 U/L 位清零。
任何设置了 I/G 位的 MAC 地址都是多播地址,广播 MAC 地址是一种特殊情况(ff-ff-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 一样),因此 LAN 上的所有主机都会看到所有帧。主机接收到的第一位告诉主机看到该帧的目的地址是个人地址还是组地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)