
The IPAddr.new().prefix function does not work as intended. This change removes the TODO comment to use the function because we can't really replace the current implementation by that built-in feature. irb(main):001:0> IPAddr.new('ffff:ffff:ffff:ffff::').to_i.to_s(2).count("1") => 64 irb(main):002:0> IPAddr.new('ffff:ffff:ffff:ffff::').prefix => 128 Change-Id: I07a340e1716f6ab8db718b89bf4535f989df7929
36 lines
1.3 KiB
Ruby
36 lines
1.3 KiB
Ruby
Puppet::Functions.create_function(:ipv6_normalize_dnsmasq_ip_subnets) do
|
|
def ipv6_normalize_dnsmasq_ip_subnets(args)
|
|
require 'ipaddr'
|
|
result = []
|
|
args.each do |ip_subnet|
|
|
ip_subnet_dup = ip_subnet.dup
|
|
begin
|
|
if ip_subnet["netmask"]
|
|
if IPAddr.new(ip_subnet["netmask"]).ipv6?
|
|
prefix = IPAddr.new(ip_subnet["netmask"]).to_i.to_s(2).count("1")
|
|
Puppet.debug("Netmask #{ip_subnet["netmask"]} changed to prefix #{prefix}")
|
|
ip_subnet_dup["netmask"] = prefix
|
|
end
|
|
end
|
|
rescue IPAddr::AddressFamilyError, IPAddr::Error, IPAddr::InvalidAddressError, IPAddr::InvalidPrefixError => e
|
|
# Ignore it
|
|
end
|
|
begin
|
|
if ip_subnet["gateway"]
|
|
if IPAddr.new(ip_subnet["gateway"]).ipv6?
|
|
# draft-ietf-mif-dhcpv6-route-option-05 was never completed.
|
|
# https://datatracker.ietf.org/doc/draft-ietf-mif-dhcpv6-route-option/
|
|
# Remove the gateway key:value so that the option:router entry is
|
|
# not created in dnsmasq.conf.
|
|
ip_subnet_dup.delete("gateway")
|
|
end
|
|
end
|
|
rescue IPAddr::AddressFamilyError, IPAddr::Error, IPAddr::InvalidAddressError, IPAddr::InvalidPrefixError => e
|
|
# Ignore it
|
|
end
|
|
result << ip_subnet_dup
|
|
end
|
|
return result
|
|
end
|
|
end
|