diff --git a/tangostationcontrol/tangostationcontrol/clients/snmp_client.py b/tangostationcontrol/tangostationcontrol/clients/snmp_client.py index 7a7f45808cdc2d160cb9db3356d3a0e9beda4be0..80638665d2c2885acbe3fe336d378511f7dc531d 100644 --- a/tangostationcontrol/tangostationcontrol/clients/snmp_client.py +++ b/tangostationcontrol/tangostationcontrol/clients/snmp_client.py @@ -2,6 +2,7 @@ from tangostationcontrol.clients.comms_client import CommClient from pysnmp import hlapi +from pysnmp.smi import builder import numpy import logging @@ -93,6 +94,11 @@ class SNMP_client(CommClient): return read_function, write_function + @staticmethod + def load_mib(mib_name): + mibBuilder = builder.MibBuilder() + mibBuilder.loadModule(mib_name) + class annotation_wrapper: def __init__(self, annotation): diff --git a/tangostationcontrol/tangostationcontrol/devices/snmp_device.py b/tangostationcontrol/tangostationcontrol/devices/snmp_device.py index 04d5a1425e19b0c5fbcb076f206bcd4ed122618a..cf079b63d8a54a57df57dddb4b56bd970f909127 100644 --- a/tangostationcontrol/tangostationcontrol/devices/snmp_device.py +++ b/tangostationcontrol/tangostationcontrol/devices/snmp_device.py @@ -57,6 +57,11 @@ class SNMP(lofar_device): mandatory=True ) + SNMP_mib_dir = device_property( + dtype='DevString', + mandatory=False + ) + SNMP_timeout = device_property( dtype='DevDouble', mandatory=True @@ -125,6 +130,17 @@ class SNMP(lofar_device): self.snmp_manager.start() + def init_device(self): + super().init_device() + + # speeds up loading + for i in self.attr_list(): + try: + SNMP_client.load_mib(i.comms_annotation["mib"]) + except Exception as e: + raise Exception(f"Failed to load MIB file: {i.comms_annotation.get('mib')} for attribute {i.get_name()}") from e + + # -------- # Commands