aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/left-right-xml39
-rw-r--r--scripts/rpki/left_right.py61
-rw-r--r--scripts/rpki/up_down.py65
-rwxr-xr-xscripts/xml-parse-test.py2
4 files changed, 53 insertions, 114 deletions
diff --git a/docs/left-right-xml b/docs/left-right-xml
index ef60f288..02f04487 100644
--- a/docs/left-right-xml
+++ b/docs/left-right-xml
@@ -334,11 +334,7 @@
<msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request">
<route_origin action="set" self_id="42" route_origin_id="88">
<suppress_publication/>
- <as_number asn="12345"/>
- <ipv4_prefix min="10.0.0.44" len="32"/>
- <ipv4_range min="10.2.0.6" max="10.2.0.77"/>
- <ipv6_prefix min="2002:a00::" len="48"/>
- <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/>
+ <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/>
</route_origin>
</msg>
@@ -352,11 +348,7 @@
<msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response">
<route_origin route_origin_id="88">
- <as_number asn="12345"/>
- <ipv4_prefix min="10.0.0.44" len="32"/>
- <ipv4_range min="10.2.0.6" max="10.2.0.77"/>
- <ipv6_prefix min="2002:a00::" len="48"/>
- <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/>
+ <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/>
</route_origin>
</msg>
@@ -366,11 +358,7 @@
<msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response">
<route_origin route_origin_id="88">
- <as_number asn="12345"/>
- <ipv4_prefix min="10.0.0.44" len="32"/>
- <ipv4_range min="10.2.0.6" max="10.2.0.77"/>
- <ipv6_prefix min="2002:a00::" len="48"/>
- <ipv6_range min="2002:a02:6::" max="2002:a02:4d::"/>
+ <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/>
</route_origin>
</msg>
@@ -390,19 +378,14 @@
<msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="data_response">
<list_resources self_id="42" child_id="id" valid_until="2008_04_01T00:00:00Z">
- <resource_class>
- <ipv4_prefix min="10.0.0.44" len="32"/>
- <ipv4_prefix min="10.3.0.44" len="32"/>
- <ipv6_prefix min="fe80:dead:beef::" len="48"/>
- <as_number asn="666"/>
- </resource_class>
- <resource_class subject_name="wombats are us">
- <subset_ipv4_prefix min="10.0.0.0" len="8"/>
- <ipv4_prefix min="10.2..0.6" len="32"/>
- <ipv6_prefix min="fe80:dead:beef::" len="48"/>
- <ipv6_range min="fe80:dead:beef::" max="fe80:dead:beef::49"/>
- <as_number asn="666"/>
- </resource_class>
+ <resource_class ipv4="10.0.0.44/32,10.3.0.44/32"
+ ipv6="fe80:dead:beef::/48"
+ as="666"/>
+ <resource_class subject_name="wombats are us"
+ req_ipv4="10.0.0.0/8"
+ ipv4="10.2..0.6/32" ipv6=
+ "fe80:dead:beef::/48,fe80:dead:beef::-fe80:dead:beef::49"
+ as="666"/>
</list_resources>
</msg>
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index a4d86a48..b3a72d7a 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -25,7 +25,7 @@ class base_elt(object):
def store(self, key, val):
if key not in self.multivalue:
- assert not getattr(self, key)
+ assert not hasattr(self, key)
setattr(self, key, val)
elif hasattr(self, key):
getattr(self, key).append(val)
@@ -144,24 +144,14 @@ class msg(list):
spec_uri = "http://www.hactrn.net/uris/rpki/left-right-spec/"
version = 1
- dispatch = {
- "self" : self_elt,
- "child" : child_elt,
- "parent" : parent_elt,
- "repository" : repository_elt,
- "route_origin" : route_origin_elt,
- "bsc" : bsc_elt,
- "list_resources" : list_resources_elt,
- "report_error" : report_error_elt }
-
def startElement(self, stack, name, attrs):
if name == "msg":
sax_utils.snarf_attribute(self, attrs, "version", int)
sax_utils.snarf_attribute(self, attrs, "type")
assert self.version == 1
else:
- assert name in self.dispatch
- elt = self.dispatch[name](self)
+ assert name in type_map
+ elt = type_map[name](self)
self.append(elt)
stack.append(elt)
elt.startElement(stack, name, attrs)
@@ -205,48 +195,3 @@ type_map = {
"extension_preference" : extension_preference_elt,
"resource_class" : resource_class_elt
}
-
-# bsc_link ; attribute-only element
-# child_db_id ; attribute-only element
-# repository_link ; attribute-only element
-# sia_base ; attribute-only element
-#
-# as_number ; attribute-only element, single/multi depending on context (sigh)
-# as_range ; attribute-only element, multi
-# ipv4_prefix ; attribute-only element, multi
-# ipv4_range ; attribute-only element, multi
-# ipv6_prefix ; attribute-only element, multi
-# ipv6_range ; attribute-only element, multi
-# peer_contact ; attribute-only element, multi
-# subset_as_number ; attribute-only element, multi
-# subset_as_range ; attribute-only element, multi
-# subset_ipv4_prefix ; attribute-only element, multi
-# subset_ipv4_range ; attribute-only element, multi
-# subset_ipv6_prefix ; attribute-only element, multi
-# subset_ipv6_range ; attribute-only element, multi
-#
-# peer_ta ; base64 element
-# pkcs10_cert_request ; base64 element
-# public_key ; base64 element
-# signing_cert ; base64 element, multi
-#
-# extension_preference ; container element, multi
-# resource_class ; container element, multi
-#
-# generate_keypair ; attribute-only control element
-# publish_world_now ; empty control element
-# reissue ; empty control element
-# rekey ; empty control element
-# revoke ; empty control element
-# run_now ; empty control element
-# suppress_publication ; empty control element
-#
-# msg ; pdu
-# bsc ; pdu element
-# child ; pdu element
-# list_resources ; pdu element
-# parent ; pdu element
-# report_error ; pdu element
-# repository ; pdu element
-# route_origin ; pdu element
-# self ; pdu element
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py
index 1ace8c30..f9901e38 100644
--- a/scripts/rpki/up_down.py
+++ b/scripts/rpki/up_down.py
@@ -13,17 +13,23 @@ class generic_pdu(object):
def endElement(self, stack, name, text):
stack.pop()
-class cert_elt(object):
+class certificate_elt(generic_pdu):
"""
Up-Down protocol representation of an issued certificate.
"""
- def __init__(self, attrs):
+ def startElement(self, stack, name, attrs):
+ assert name == "certificate", "Unexpected name %s, stack %s" % (name, stack)
self.cert_url = attrs["cert_url"]
self.req_resource_set_as = resource_set.resource_set_as(attrs["req_resource_set_as"])
self.req_resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["req_resource_set_ipv4"])
self.req_resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["req_resource_set_ipv6"])
+ def endElement(self, stack, name, text):
+ assert name == "certificate"
+ self.cert = base64.b64decode(text)
+ stack.pop()
+
def __str__(self):
xml = (' <certificate cert_url="%s"' % (self.cert_url))
if self.req_resource_set_as:
@@ -35,20 +41,36 @@ class cert_elt(object):
xml += ">" + base64.b64encode(self.cert) + "</certificate>\n"
return xml
-class class_elt(object):
+class class_elt(generic_pdu):
"""
Up-Down protocol representation of a resource class.
"""
- def __init__(self, attrs):
- self.class_name = attrs["class_name"]
- self.cert_url = attrs["cert_url"]
- self.suggested_sia_head = attrs.get("suggested_sia_head")
- self.resource_set_as = resource_set.resource_set_as(attrs["resource_set_as"])
- self.resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["resource_set_ipv4"])
- self.resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["resource_set_ipv6"])
+ def __init__(self):
self.certs = []
+ def startElement(self, stack, name, attrs):
+ if name == "certificate":
+ cert = certificate_elt()
+ self.certs.append(cert)
+ stack.append(cert)
+ cert.startElement(stack, name, attrs)
+ elif name != "issuer":
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ self.class_name = attrs["class_name"]
+ self.cert_url = attrs["cert_url"]
+ self.suggested_sia_head = attrs.get("suggested_sia_head")
+ self.resource_set_as = resource_set.resource_set_as(attrs["resource_set_as"])
+ self.resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["resource_set_ipv4"])
+ self.resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["resource_set_ipv6"])
+
+ def endElement(self, stack, name, text):
+ if name == "issuer":
+ self.issuer = base64.b64decode(text)
+ else:
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ stack.pop()
+
def __str__(self):
xml = ('\
<class class_name="%s"\n\
@@ -83,23 +105,12 @@ class list_response_pdu(generic_pdu):
self.classes = []
def startElement(self, stack, name, attrs):
- if name == "class":
- self.classes.append(class_elt(attrs))
- elif name == "certificate":
- self.classes[-1].certs.append(cert_elt(attrs))
- elif name != "issuer":
- assert name == "list_response", "Unexpected name %s, stack %s" % (name, stack)
-
- def endElement(self, stack, name, text):
- if name == "certificate":
- self.classes[-1].certs[-1].cert = base64.b64decode(text)
- elif name == "issuer":
- self.classes[-1].issuer = base64.b64decode(text)
- elif name != "class":
- assert name == "message", "Unexpected name %s, stack %s" % (name, stack)
- stack.pop()
- stack[-1].endElement(stack, name, text)
-
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ klass = class_elt()
+ self.classes.append(klass)
+ stack.append(klass)
+ klass.startElement(stack, name, attrs)
+
def __str__(self):
return "".join(map(str, self.classes))
diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py
index 7c1ff3c3..27b57d1c 100755
--- a/scripts/xml-parse-test.py
+++ b/scripts/xml-parse-test.py
@@ -10,6 +10,6 @@ for f in files:
x = fh.read()
fh.close()
xml.sax.parseString(x, handler)
- x = str(handler.obj)
+ x = str(handler.result)
print x
rpki.relaxng.relaxng(x, "up-down-medium-schema.rng")