# $Id$ import socket import re class ip_address(object): def __init__(self, text): self.addr = socket.inet_pton(self.af, text) def __str__(self): return socket.inet_ntop(self.af, self.addr) def __eq__(self, other): return self.addr == other.addr def __hash__(self): return self.addr.__hash__() class ipv4_address(ip_address): af = socket.AF_INET class ipv6_address(ip_address): af = socket.AF_INET6 class resource(object): pass class asn(resource, long): pass class ip_prefix(resource): def __init__(self, addr, prefixlen): self.addr = self.ac(addr) self.prefixlen = prefixlen def __str__(self): return str(self.addr) + "/" + str(self.prefixlen) def __eq__(self, other): return self.addr == other.addr and self.prefixlen == other.prefixlen def __hash__(self): return self.addr.__hash__() + self.prefixlen.__hash__() class ipv4_prefix(ip_prefix): ac = ipv4_address class ipv6_prefix(ip_prefix): ac = ipv6_address class resource_range(resource): def __init__(self, min, max): assert isinstance(min, resource) and isinstance(max, resource) self.min = min self.max = max def __str__(self): return str(self.min) + "-" + str(self.max) def __eq__(self, other): return self.min == other.min and self.max == other.max def __hash__(self): return self.min.__hash__() + self.max.__hash__() class resource_set(set): def __init__(self, *elts): for e in elts: assert isinstance(e, resource) set.__init__(self, elts) def __str__(self): s = [i for i in self] s.sort() return "{" + ", ".join(map(str, s)) + "}" s = resource_set(ipv6_prefix("fe80::", 16), ipv4_prefix("10.0.0.44", 32), ipv4_prefix("10.3.0.44", 32)) print s 9bd056505f669'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/sra/rpki.net/blame/?id=55494ccab6dbdbd2fa538f762359bd056505f669'>root</a>/<a href='/sra/rpki.net/blame/rcynic?id=55494ccab6dbdbd2fa538f762359bd056505f669'>rcynic</a>/<a href='/sra/rpki.net/blame/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>README</a></div><div class='content'>blob: ecc92ac504888db60c5b29fd2b2419fd583648b9 (<a href='/sra/rpki.net/plain/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>plain</a>) (<a href='/sra/rpki.net/tree/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>tree</a>) <table class='blame blob'> <tr> <td class='hashes'><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 committer Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 committer Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 committer Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 committer Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 committer Rob Austein <sra@hactrn.net> 2006-09-27 18:18:53 +0000 Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span> </pre></div><div class='alt'><pre><span class='sha1'><a title='author Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 committer Rob Austein <sra@hactrn.net> 2012-04-16 20:32:12 +0000 Clean up README files. Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span> </pre></div></td> <td class='linenumbers'><div class='alt'><pre><a id='n1' href='#n1'>1</a> </pre></div><div class='alt'><pre><a id='n2' href='#n2'>2</a> <a id='n3' href='#n3'>3</a> <a id='n4' href='#n4'>4</a> </pre></div><div class='alt'><pre><a id='n5' href='#n5'>5</a> </pre></div><div class='alt'><pre><a id='n6' href='#n6'>6</a> </pre></div><div class='alt'><pre><a id='n7' href='#n7'>7</a> </pre></div><div class='alt'><pre><a id='n8' href='#n8'>8</a> </pre></div><div class='alt'><pre><a id='n9' href='#n9'>9</a> </pre></div><div class='alt'><pre><a id='n10' href='#n10'>10</a> </pre></div><div class='alt'><pre><a id='n11' href='#n11'>11</a> </pre></div><div class='alt'><pre><a id='n12' href='#n12'>12</a> </pre></div><div class='alt'><pre><a id='n13' href='#n13'>13</a> </pre></div></td> <td class='lines'><div><div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div><div class='alt'><pre> </pre></div></div><pre><code>