From 3aa6d81a62505b6634930333cb7a3df4c4c53efa Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Thu, 27 Jun 2019 16:07:19 +0200 Subject: [PATCH] simpler method for retreiving snmp indexes --- inventory_provider/snmp.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/inventory_provider/snmp.py b/inventory_provider/snmp.py index a5a48b70..e7cc25a4 100644 --- a/inventory_provider/snmp.py +++ b/inventory_provider/snmp.py @@ -7,6 +7,18 @@ from pysnmp.smi import builder, compiler # from pysnmp.smi import view, rfc1902 +OID_LIST = { + ## IPv4 + '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' +} + def _v6address_oid2str(dotted_decimal): hex_params = [] for dec in re.split(r'\.', dotted_decimal): @@ -78,6 +90,15 @@ def walk(agent_hostname, community, base_oid): # pragma: no cover yield result +def get_router_snmp_indexes(hostname, community): + indexes = {} + RFC1213_MIB_ifDesc = '1.3.6.1.2.1.2.2.1.2' + for ifc in walk(hostname, community, RFC1213_MIB_ifDesc): + m = re.match(r'.*\.(\d+)$', ifc['oid']) + assert m, 'sanity failure parsing oid: %r' % ifc['oid'] + indexes[ifc['value']] = int(m.group(1)) + return indexes + def get_router_interfaces(hostname, community, config): oid_map = config["oids"] @@ -123,3 +144,10 @@ def get_router_interfaces(hostname, community, config): "v6InterfaceName": v6IfcNames[m.group(1)], "index": m.group(1) } + +if __name__ == "__main__": + hostname = 'mx1.ams.nl.geant.net' + community = '0pBiFbD' + interfaces = get_router_snmp_indexes(hostname, community) + for name, index in interfaces.items(): + print('%s: %s' % (name, index)) -- GitLab