Merge pull request #7693 from legal90/network_address
util/network_ip: Simplify #network_address helper
This commit is contained in:
commit
d293e5dc08
|
@ -5,34 +5,9 @@ module Vagrant
|
||||||
module NetworkIP
|
module NetworkIP
|
||||||
# Returns the network address of the given IP and subnet.
|
# Returns the network address of the given IP and subnet.
|
||||||
#
|
#
|
||||||
# If the IP address is an IPv6 address, subnet should be a prefix
|
|
||||||
# length such as "64".
|
|
||||||
#
|
|
||||||
# @return [String]
|
# @return [String]
|
||||||
def network_address(ip, subnet)
|
def network_address(ip, subnet)
|
||||||
# If this is an IPv6 address, then just mask it
|
IPAddr.new(ip).mask(subnet).to_s
|
||||||
if subnet.to_s =~ /^\d+$/
|
|
||||||
ip = IPAddr.new(ip)
|
|
||||||
return ip.mask(subnet.to_i).to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
ip = ip_parts(ip)
|
|
||||||
netmask = ip_parts(subnet)
|
|
||||||
|
|
||||||
# Bitwise-AND each octet to get the network address
|
|
||||||
# in octets and join each part with a period to get
|
|
||||||
# the resulting network address.
|
|
||||||
ip.map { |part| part & netmask.shift }.join(".")
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
# Splits an IP into the four octets and returns each as an
|
|
||||||
# integer in an array.
|
|
||||||
#
|
|
||||||
# @return [Array<Integer>]
|
|
||||||
def ip_parts(ip)
|
|
||||||
ip.split(".").map { |i| i.to_i }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,6 +18,10 @@ describe Vagrant::Util::NetworkIP do
|
||||||
expect(klass.network_address("192.168.2.234", "24")).to eq("192.168.2.0")
|
expect(klass.network_address("192.168.2.234", "24")).to eq("192.168.2.0")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "calculates it properly with integer submask" do
|
||||||
|
expect(klass.network_address("192.168.2.234", 24)).to eq("192.168.2.0")
|
||||||
|
end
|
||||||
|
|
||||||
it "calculates it properly for IPv6" do
|
it "calculates it properly for IPv6" do
|
||||||
expect(klass.network_address("fde4:8dba:82e1::c4", "64")).to eq("fde4:8dba:82e1::")
|
expect(klass.network_address("fde4:8dba:82e1::c4", "64")).to eq("fde4:8dba:82e1::")
|
||||||
end
|
end
|
||||||
|
@ -25,5 +29,9 @@ describe Vagrant::Util::NetworkIP do
|
||||||
it "calculates it properly for IPv6" do
|
it "calculates it properly for IPv6" do
|
||||||
expect(klass.network_address("fde4:8dba:82e1::c4", 64)).to eq("fde4:8dba:82e1::")
|
expect(klass.network_address("fde4:8dba:82e1::c4", 64)).to eq("fde4:8dba:82e1::")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "calculates it properly for IPv6 for string mask" do
|
||||||
|
expect(klass.network_address("fde4:8dba:82e1::c4", "ffff:ffff:ffff:ffff::")).to eq("fde4:8dba:82e1::")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue