def to_ipv6(cidr, options=nil)
known_args = [:Short, :Objectify]
objectify = false
short = false
if ( !cidr.kind_of?(NetAddr::CIDR) )
begin
cidr = NetAddr::CIDR.create(cidr)
rescue Exception => error
raise ArgumentError, "CIDR raised the following errors: #{error}"
end
elsif (cidr.kind_of?(NetAddr::CIDRv4) )
raise ArgumentError, "Expected CIDRv6, but #{cidr.class} provided."
end
if (cidr.bits > 64)
raise ValidationError, "Prefix length of provided CIDR must be /64 or less but was #{cidr.netmask}."
end
if (options)
if (!options.kind_of? Hash)
raise ArgumentError, "Expected Hash, but #{options.class} provided."
end
NetAddr.validate_args(options.keys,known_args)
if (options.has_key?(:Objectify) && options[:Objectify] == true)
objectify = true
end
if (options.has_key?(:Short) && options[:Short] == true)
short = true
end
end
if ( self.kind_of?(NetAddr::EUI48) )
eui_i = self.to_eui64.to_i
else
eui_i = self.to_i
end
eui_i = eui_i ^ 0x0200000000000000
ipv6 = cidr.to_i | eui_i
if (!objectify)
ipv6 = NetAddr.i_to_ip(ipv6, :Version => 6)
ipv6 = NetAddr.shorten(ipv6) if (short)
else
ipv6 = NetAddr::CIDRv6.new(ipv6)
end
return(ipv6)
end