aboutsummaryrefslogtreecommitdiff
path: root/scripts/debug-roas.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/debug-roas.py')
-rw-r--r--scripts/debug-roas.py38
1 files changed, 33 insertions, 5 deletions
diff --git a/scripts/debug-roas.py b/scripts/debug-roas.py
index 717743f8..fd7638d2 100644
--- a/scripts/debug-roas.py
+++ b/scripts/debug-roas.py
@@ -1,5 +1,7 @@
"""
-Debugging tool for chasing a particular weird ROA problem.
+Debugging tool for chasing a particular weird ROA problem. Dumps
+contents of roa objects from SQL. Dog ugly, do not read output
+without a welding helmet.
Usage: python debug-roas.py [ { -c | --config } configfile ]
[ { -h | --help } ]
@@ -38,10 +40,15 @@ PERFORMANCE OF THIS SOFTWARE.
"""
import os, time, getopt, sys, re
-import rpki.sql, rpki.config, rpki.log, rpki.rpki_engine, rpki.left_right
+import rpki.sql, rpki.config, rpki.log, rpki.resource_set
+import rpki.rpki_engine, rpki.left_right
class main(object):
+ _afi_map = dict((cls.resource_set_type.afi, cls)
+ for cls in (rpki.resource_set.roa_prefix_set_ipv4,
+ rpki.resource_set.roa_prefix_set_ipv6))
+
def __init__(self):
os.environ["TZ"] = "UTC"
@@ -65,14 +72,35 @@ class main(object):
self.sql = rpki.sql.session(rpki.config.parser(cfg_file, "rpkid"))
for s in rpki.left_right.self_elt.sql_fetch_all(self):
-
print "Examining <self self_handle=%r/>" % s.self_handle
-
for r in s.roas():
v4 = r.ipv4.to_resource_set() if r.ipv4 is not None else rpki.resource_set.resource_set_ipv4()
v6 = r.ipv6.to_resource_set() if r.ipv6 is not None else rpki.resource_set.resource_set_ipv6()
+ print " Found ROA %r %s" % (r, "<%s %s>" % (r.asn, ("%s,%s" % (v4, v6)).strip(",")))
+
+ if r.roa is None:
+ print " No CMS object"
+ else:
+ print " %s" % r.roa.get_POW().pprint()
+
+ print " asID %s" % (r.roa.extract().asID.get(),)
+ for f in r.roa.get_content().ipAddrBlocks:
+ t = self._afi_map[f.addressFamily.get()].resource_set_type.range_type.datum_type
+ for a in f.addresses:
+ p = a.address.get()
+ l = len(p)
+ p = t(rpki.resource_set._bs2long(p, t.bits, 0))
+ m = a.maxLength.get()
+ if m is None or m == l:
+ print " %s/%s" % (p, l)
+ else:
+ print " %s/%s-%s" % (p, l, m)
+
+ if r.cert is None:
+ print " No EE certificate"
+ else:
+ print " EE %s" % r.cert.get_POW().pprint()
- print " Found ROA %r %s" % (r, "<%s %s>" % (r.asn, ("%s,%s" % (v4, v6)).strip(",")))
main()