26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/cbor-diagnostic-app/ipgrammar.rb', line 26
def ast
fam, addr = elements[0].ast
prefix = elements[1].text_value
if prefix.empty?
[fam, addr]
else
prefixlength = Integer(prefix[1..-1])
masked_addr = IPAddr.new_ntoh(addr).mask(prefixlength).hton
i = addr.size
while addr.getbyte(i-1) == 0
break if (i -= 1) == 0
end
short_addr = addr[0...i]
if masked_addr != addr
warn "*** dt'': non-zero bits outside of prefix #{prefixlength}: #{short_addr.bytes.map{|x| "%02x" % x}.join}"
end
[fam, [prefixlength, short_addr]]
end
end
|