diff --git a/config.py b/config.py index 62b7d14074182d415965f88b198cdbb4a43a2dc9..0384fc7c9799b2b357d7fffcc1d590a904e45524 100644 --- a/config.py +++ b/config.py @@ -58,6 +58,7 @@ def walk(agent_hostname, community, base_oid): # print("\toid: '%s', val: '%s'" % ( # oid.prettyPrint(), val.prettyPrint())) + def _validate_config(ctx, param, value): """ loads, validates and returns configuration parameters @@ -135,6 +136,13 @@ def _db_test(db, router): print(absid) +def _v6address_oid2str(dotted_decimal): + hex_params = [] + for dec in re.split(r'\.', dotted_decimal): + hex_params.append("%02x" % int(dec)) + return ":".join(hex_params) + + def get_router_interfaces(router): with open("oid_list.conf") as f: oid_map = load_oids(f) @@ -146,62 +154,42 @@ def get_router_interfaces(router): details[name] = list(details[name]) print(details[name]) - # assert len(details["v4Address"]) == len(details["v4Mask"]) - # assert len(details["v4Address"]) == len(details["v4InterfaceOID"]) - - interface_names = dict([x["oid"], x["value"]] - for x in details["v4InterfaceName"]) + v4IfcNames = {} + for v4IfcName in details["v4InterfaceName"]: + m = re.match(r'.*\.(\d+)$', v4IfcName["oid"]) + assert m, "sanity failure parsing oid: " + v4IfcName["oid"] + v4IfcNames[m.group(1)] = v4IfcName["value"] interfaces = [] for v4Address, v4Mask, v4InterfaceOID in zip( details["v4Address"], details["v4Mask"], details["v4InterfaceOID"]): - ifc_oid = oid_map["v4InterfaceName"] + "." + v4InterfaceOID["value"] - v4InterfaceName = interface_names[ifc_oid] - interfaces.append({ + yield { "v4Address": v4Address["value"], "v4Mask": v4Mask["value"], - "v4InterfaceName": v4InterfaceName - }) - + "v4InterfaceName": v4IfcNames[v4InterfaceOID["value"]] + } v6IfcNames = {} for v6InterfaceName in details["v6InterfaceName"]: m = re.match(r'.*\.(\d+)$', v6InterfaceName["oid"]) - assert m + assert m, "sanity failure parsing oid: " + v6InterfaceName["oid"] v6IfcNames[m.group(1)] = v6InterfaceName["value"] for v6AddressAndMask in details["v6AddressAndMask"]: - oid = v6AddressAndMask["oid"] - oid_info = oid[len(oid_map["v6AddressAndMask"]):] - m = re.match(r'^\.(\d+)\.(.+)$', oid_info) - assert m - interfaces.append({ - "v6Address": m.group(2), + pattern = ( + r'^' + + oid_map["v6AddressAndMask"].replace(r'.', r'\.') + + r'\.(\d+)\.(.+)$' + ) + m = re.match(pattern, v6AddressAndMask["oid"]) + assert m, "sanity failure parsing oid: " + v6InterfaceName["oid"] + yield { + "v6Address": _v6address_oid2str(m.group(2)), "v6Mask": v6AddressAndMask["value"], "v6InterfaceName": v6IfcNames[m.group(1)] - }) - return interfaces - - """ - v4Address=.1.3.6.1.2.1.4.20.1.1 -v4InterfaceOID=.1.3.6.1.2.1.4.20.1.2 -v4InterfaceName=.1.3.6.1.2.1.31.1.1.1.1 -v4Mask=.1.3.6.1.2.1.4.20.1.3 - -## IPv6 -v6AddressAndMask=.1.3.6.1.2.1.55.1.8.1.2 -v6InterfaceName=.1.3.6.1.2.1.55.1.5.1.2 -""" - # interfaces = [] - # - # # for name, oid in - # # # walk(r["address"], r["community"], ".1.3.6.1.2.1.4.20.1.1") - # # walk(r["hostname"], r["community"], ".1.3.6.1.2.1.4.20.1.1") - # print(details) - # - # + } @click.command()