dmacvicar / terraform-provider-libvirt

Terraform provider to provision infrastructure with Linux's KVM using libvirt
Apache License 2.0
1.54k stars 457 forks source link

Fix IPv6 subnet size regression #983

Closed omertuc closed 1 year ago

omertuc commented 1 year ago

b0489a5cb128b6acae1976e0383e22bf3d870277 introduced a regression where the calculation for the number of IPv6 IP addresses always yields a negative or 0 value, causing users to always encounter the following error when creating IPv6 libvirt networks:

netmask seems to be too strict: only <0 or negative> IPs available (ipv6)

(An example is available at the end of this CI log)

That commit attempted to fix the wrong use of the ^ operator in the calculation, which was truely wrong. But it was just wrong in a relatively "harmless" way, as it wasn't completely blocking users.

The fix in that commit had its own bug - a 1 shifted by 128 always gives 0, and not the desired 2 to the power of 128, because the latter doesn't fit in a primitive integer type.

To fix this, I've changed the calculation to simply consider the number of bits available for the subnet, rather than the number of IP addresses available for the subnet, as that is obviously a much smaller number, one that the primitive Go integer types can handle

osherdp commented 1 year ago

@dmacvicar just FYI as it's currently a blocker for our usage of the new version v0.7.0

dmacvicar commented 1 year ago

Thanks for the patch @omertuc

dmacvicar commented 1 year ago

This is included in 0.7.1

osherdp commented 1 year ago

Thank you very much! I'll test it right away