分析了 ovs 代码:
- 在 Vxlan.c 第 42 行定义
VXLAN_ID_IS_VALID(vxlanID) (0 < (vxlanID) && (vxlanID) <= 0xffffff),说明有效的 VXLAN VNI 取值为 1 至 16,777,215(0x1…0xffffff),VNI 0 被视为无效。 VXLAN_VNI_TO_TUNNELID/VXLAN_TUNNELID_TO_VNI宏只是把 24 位 VNI 与 64 位 tunnel ID 之间做位移映射,没有额外的偏移或保留区间。- Linux datapath 使用相同布局(例如 netdev-native-tnl.c 第 1145–1151 行,对 VNI 做 >>8 位操作并检查低 8 位),验证了同样的 24 位范围限制。
- vtep.xml 文档明确指出 VXLAN VNI 必须处于 0–16,777,215 范围,呼应了行业标准。
- OVS 不会自动分配 VNI;需要由控制器或用户明确指定,除 VNI 0 外,没有其他预留区间。