diff options
author | Rob Austein <sra@hactrn.net> | 2007-10-01 06:21:13 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-10-01 06:21:13 +0000 |
commit | 9162534362e2ff6ff3b54625ee3d3e2f778d1e8b (patch) | |
tree | c87e18d6365cceda9151fa18b2f84af915847233 /scripts/rpki/resource_set.py | |
parent | f720a81de18f2703ead63747e99665a9a9076d0a (diff) |
Checkpoint
svn path=/scripts/rpki/resource_set.py; revision=1063
Diffstat (limited to 'scripts/rpki/resource_set.py')
-rw-r--r-- | scripts/rpki/resource_set.py | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/scripts/rpki/resource_set.py b/scripts/rpki/resource_set.py index b805fb97..45fa096e 100644 --- a/scripts/rpki/resource_set.py +++ b/scripts/rpki/resource_set.py @@ -56,28 +56,31 @@ class resource_range_ip(resource_range): represented as prefixes are written as prefixes on output. """ - def __str__(self): + def _prefixlen(self): mask = self.min ^ self.max - prefixlen = self.min.bits + prefixlen = self.addr_type.bits while mask & 1: prefixlen -= 1 mask >>= 1 if mask: + return -1 + else: + return prefixlen + + def __str__(self): + prefixlen = self._prefixlen() + if prefixlen < 0: return str(self.min) + "-" + str(self.max) else: return str(self.min) + "/" + str(prefixlen) def to_tuple(self): - mask = self.min ^ self.max - if (mask & (~mask + 1)) <= 1: - n = self.bits - while mask: - n -= 1 - mask >>= 1 - return ("addressPrefix", _long2bs(self.min, self.bits, prefixlen = n)) + prefixlen = self._prefixlen() + if prefixlen < 0: + return ("addressRange", (_long2bs(self.min, self.addr_type.bits, strip = 0), + _long2bs(self.max, self.addr_type.bits, strip = 1))) else: - return ("addressRange", (_long2bs(self.min, self.bits, strip = 0), - _long2bs(self.max, self.bits, strip = 1))) + return ("addressPrefix", _long2bs(self.min, self.addr_type.bits, prefixlen = prefixlen)) class resource_range_ipv4(resource_range_ip): """Range of IPv4 addresses.""" @@ -313,7 +316,7 @@ def _long2bs(number, addrlen, prefixlen = None, strip = None): assert prefixlen is None or strip is None bs = [] while number: - bs.append(number & 1) + bs.append(int(number & 1)) number >>= 1 if addrlen > len(bs): bs.extend((0 for i in xrange(addrlen - len(bs)))) |