def CIDRv6.unique_local(eui)
if (eui.kind_of?(NetAddr::EUI48) )
eui = eui.to_eui64.to_s
elsif (eui.kind_of?(NetAddr::EUI64) )
eui = eui.to_s
else
raise ArgumentError, "Expected NetAddr::EUI object but #{eui.class} received."
end
ntp_time = ''
time = Time.now.to_i
4.times do
ntp_time.insert(0, (time & 0xff).chr )
time = time >> 8
end
fract = rand(2**32-1)
4.times do
ntp_time.insert(0, (fract & 0xff).chr )
fract = fract >> 8
end
pre_hash = ntp_time << eui
gid = Digest::SHA1.hexdigest(pre_hash).slice!(30..39)
addr = 'fd' << gid << '00000000000000000000'
return( NetAddr::CIDRv6.new(addr.to_i(16), 0xffffffffffff00000000000000000000 ) )
end