lib/facter/util/resolvers/networking/networking.rb in facter-4.2.14 vs lib/facter/util/resolvers/networking/networking.rb in facter-4.3.0
- old
+ new
@@ -62,11 +62,28 @@
return binding unless ignored_ip_address(binding[:address])
end
bindings.empty? ? nil : bindings.first
end
+ IPV4_LINK_LOCAL_ADDR = IPAddr.new('169.254.0.0/16').freeze # RFC5735
+ IPV6_LINK_LOCAL_ADDR = IPAddr.new('fe80::/10').freeze # RFC4291
+ IPV6_UNIQUE_LOCAL_ADDR = IPAddr.new('fc00::/7').freeze # RFC4193
+
def ignored_ip_address(addr)
- addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
+ return true if addr.empty?
+
+ ip = IPAddr.new(addr)
+ return true if ip.loopback?
+
+ [
+ IPV4_LINK_LOCAL_ADDR,
+ IPV6_LINK_LOCAL_ADDR,
+ IPV6_UNIQUE_LOCAL_ADDR
+ ].each do |range|
+ return true if range.include?(ip)
+ end
+
+ false
end
def calculate_mask_length(netmask)
ipaddr = IPAddr.new(netmask)