diff options
Diffstat (limited to 'scripts/debug-roas.py')
-rw-r--r-- | scripts/debug-roas.py | 38 |
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() |