aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/rpki/ipaddrs.py8
-rw-r--r--scripts/rpki/relaxng.py4
-rw-r--r--scripts/rpki/resource_set.py38
-rw-r--r--scripts/rpki/up_down.py40
4 files changed, 90 insertions, 0 deletions
diff --git a/scripts/rpki/ipaddrs.py b/scripts/rpki/ipaddrs.py
index e041e801..73e404ca 100644
--- a/scripts/rpki/ipaddrs.py
+++ b/scripts/rpki/ipaddrs.py
@@ -3,6 +3,10 @@
import socket, struct
class v4addr(long):
+ """
+ IPv4 address. Derived from long, but supports IPv4 print syntax.
+ """
+
bits = 32
def __new__(cls, x):
@@ -15,6 +19,10 @@ class v4addr(long):
return socket.inet_ntop(socket.AF_INET, struct.pack("!I", long(self)))
class v6addr(long):
+ """
+ IPv6 address. Derived from long, but supports IPv6 print syntax.
+ """
+
bits = 128
def __new__(cls, x):
diff --git a/scripts/rpki/relaxng.py b/scripts/rpki/relaxng.py
index 21f6d2b7..a4a6c00d 100644
--- a/scripts/rpki/relaxng.py
+++ b/scripts/rpki/relaxng.py
@@ -3,6 +3,10 @@
import os
def relaxng(xml, rng):
+ """
+ Validate a chunk of xml against a RelaxNG schema.
+ """
+
i, o = os.popen4(("xmllint", "--noout", "--relaxng", rng, "-"))
i.write(xml)
i.close()
diff --git a/scripts/rpki/resource_set.py b/scripts/rpki/resource_set.py
index bc1e7c16..a0e71566 100644
--- a/scripts/rpki/resource_set.py
+++ b/scripts/rpki/resource_set.py
@@ -3,6 +3,10 @@
import re, ipaddrs
class resource_range(object):
+ """
+ Generic resource range type. Assumes underlying type is some kind of integer.
+ You probably don't want to use this type directly.
+ """
def __init__(self, min, max):
assert min <= max, "Mis-ordered range: %s before %s" % (str(min), str(max))
@@ -16,6 +20,10 @@ class resource_range(object):
return c
class resource_range_as(resource_range):
+ """
+ Range of Autonomous System Numbers.
+ Denote a single ASN by a range whose min and max values are identical.
+ """
def __str__(self):
if self.min == self.max:
@@ -24,6 +32,11 @@ class resource_range_as(resource_range):
return str(self.min) + "-" + str(self.max)
class resource_range_ip(resource_range):
+ """
+ Range of (generic) IP addresses. Prefixes are converted to ranges
+ on input, and ranges that can be represented as prefixes are written
+ as prefixes on output.
+ """
def __str__(self):
mask = self.min ^ self.max
@@ -37,12 +50,22 @@ class resource_range_ip(resource_range):
return str(self.min) + "/" + str(prefixlen)
class resource_range_ipv4(resource_range_ip):
+ """
+ Range of IPv4 addresses.
+ """
pass
class resource_range_ipv6(resource_range_ip):
+ """
+ Range of IPv6 addresses.
+ """
pass
class resource_set(list):
+ """
+ Generic resource set. List type containing resource ranges.
+ You probably don't want to use this type directly.
+ """
def __init__(self, s):
if s:
@@ -56,6 +79,9 @@ class resource_set(list):
return ",".join(map(str, self))
class resource_set_as(resource_set):
+ """
+ ASN resource set.
+ """
def parse(self, x):
r = re.match("^([0-9]+)-([0-9]+)$", x)
@@ -65,6 +91,10 @@ class resource_set_as(resource_set):
return resource_range_as(long(x), long(x))
class resource_set_ip(resource_set):
+ """
+ (Generic) IP address resource set.
+ You probably don't want to use this type directly.
+ """
def parse(self, x):
r = re.match("^([0-9:.a-fA-F]+)-([0-9:.a-fA-F]+)$", x)
@@ -81,9 +111,17 @@ class resource_set_ip(resource_set):
raise RuntimeError, 'Bad IP resource "%s"' % (x)
class resource_set_ipv4(resource_set_ip):
+ """
+ IPv4 address resource set.
+ """
+
addr_type = ipaddrs.v4addr
range_type = resource_range_ipv4
class resource_set_ipv6(resource_set_ip):
+ """
+ IPv6 address resource set.
+ """
+
addr_type = ipaddrs.v6addr
range_type = resource_range_ipv6
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py
index f595eb24..7435a1d5 100644
--- a/scripts/rpki/up_down.py
+++ b/scripts/rpki/up_down.py
@@ -3,6 +3,12 @@
import base64, xml.sax, resource_set
def snarf(obj, attrs, key, func=None):
+ """
+ Utility function to consolidate the steps needed to extract a field
+ from the SAX XML parse and insert it as an object attribute of the
+ same name.
+ """
+
try:
val = attrs.getValue(key).encode("ascii")
if func:
@@ -12,6 +18,9 @@ def snarf(obj, attrs, key, func=None):
setattr(obj, key, val)
class msg(object):
+ """
+ Base type for Up-Down protocol PDU.
+ """
def __str__(self):
return ('\
@@ -34,6 +43,9 @@ class msg(object):
pass
class cert(object):
+ """
+ Up-Down protocol representation of an issued certificate.
+ """
def __init__(self, attrs):
snarf(self, attrs, "cert_url")
@@ -53,6 +65,9 @@ class cert(object):
return xml
class klass(object):
+ """
+ Up-Down protocol representation of a resource class.
+ """
def __init__(self, attrs):
snarf(self, attrs, "class_name")
@@ -81,9 +96,15 @@ class klass(object):
return xml
class list(msg):
+ """
+ Up-Down protocol "list" PDU.
+ """
pass
class list_response(msg):
+ """
+ Up-Down protocol "list_response" PDU.
+ """
def __init__(self):
self.klasses = []
@@ -104,6 +125,9 @@ class list_response(msg):
return "".join(map(str, self.klasses))
class issue(msg):
+ """
+ Up-Down protocol "issue" PDU.
+ """
def startElement(self, name, attrs):
assert name == "request"
@@ -127,12 +151,18 @@ class issue(msg):
return xml + ">" + base64.b64encode(self.pkcs10) + "</request>\n"
class issue_response(list_response):
+ """
+ Up-Down protocol "issue_response" PDU.
+ """
def toXML(self):
assert len(self.klasses) == 1
return list_response.toXML(self)
class revoke(msg):
+ """
+ Up-Down protocol "revoke" PDU.
+ """
def startElement(self, name, attrs):
snarf(self, attrs, "class_name")
@@ -142,9 +172,15 @@ class revoke(msg):
return (' <key class_name="%s" ski="%s" />\n' % (self.class_name, self.ski))
class revoke_response(revoke):
+ """
+ Up-Down protocol "revoke_response" PDU.
+ """
pass
class error_response(msg):
+ """
+ Up-Down protocol "error_response" PDU.
+ """
def toXML(self):
return ' <status>%d</status>\n' % self.status
@@ -158,6 +194,10 @@ class error_response(msg):
self.description = text
class sax_handler(xml.sax.handler.ContentHandler):
+ """
+ SAX handler for Up-Down protocol. Builds message PDU then
+ dispatches to that class's handler for nested data.
+ """
def __init__(self):
self.text = ""