删除链路本地地址(IPv6 link-local address)时直接删除整个 VRRP 实例 的问题,这种做法在动态环境中会导致 不可恢复的问题,特别是在 MAC 地址修改等场景。我们来详细解析这个问题,并给出优化建议。
🧠 一、现有逻辑的问题分析
当前逻辑(重点片段):
if (pEntry->ipType == VRRP_IPTYPE_IPV6
&& ipAddr[0] == 0xfe && ipAddr[1] == 0x80)
{
// 删除 link-local 地址则整个 VRRP 实例删除
vrrpOperEntryDel(pEntry, VRRP_TRUE);
...
}
⚠️ 逻辑问题说明:
-
链路本地地址是 VRRP IPv6 实例绑定的必要条件(如用于组播发送/邻居发现等)。
-
修改 MAC 地址会触发
netlink
中对应接口的地址删除事件,其中包括删除 link-local 地址(fe80::/10)。 -
此时现有逻辑会将 VRRP 实例直接
vrrpOperEntryDel()
,造成配置丢失,后续即使重新添加 IP,实例也不会自动恢复。 -
VRRP 实例