neutron/ipam/utils.py
这个模块实现了 Ipam 常用的方法。
根据 cidr 和设定的 gateway_ip 生成以 netaddr.IPRange
表示的地址池(利用 netaddr
模块实现)。
对于 ipv4,要掐头去尾;
对于 ipv6,要去头;
若 gateway_ip
不为空,则要在地址池中去掉网关地址
根据该子网的 cidr 检查这个 ip 地址(将要从该子网分配)是否可被分配。
- 被分配的 Ip 地址不能是网络地址
- 若 ip 版本为4,则不能分配该子网的广播地址
- 该 Ip 要在 cidr 范围内
对于该子网来说,检查该网关地址是否正确。
- 网关地址要在子网范围内
- 网关地址不能为网络地址和广播地址