diff --git a/netengine/backends/snmp/openwrt.py b/netengine/backends/snmp/openwrt.py index 0249ed6..170db7f 100755 --- a/netengine/backends/snmp/openwrt.py +++ b/netengine/backends/snmp/openwrt.py @@ -15,6 +15,8 @@ class OpenWRT(SNMP): """ OpenWRT SNMP backend """ + + _interface_dict = {} def __str__(self): """ print a human readable object description """ @@ -225,6 +227,28 @@ def interfaces_to_dict(self): }) results.append(result) return results + + @property + def interface_addr_and_mask(self): + interface_name = self.get_interfaces() + for i in range(0, len(interface_name)): + self._interface_dict[self._value_to_retrieve()[i]] = interface_name[i] + interface_ip_address = self.next("1.3.6.1.2.1.4.20.1.1")[3] + interface_index = self.next("1.3.6.1.2.1.4.20.1.2")[3] + interface_netmask = self.next("1.3.6.1.2.1.4.20.1.3")[3] + results = [] + for i in range(0, len(interface_ip_address)): + a = interface_ip_address[i][0][1].asNumbers() + ip_address = '.'.join(str(a[i]) for i in range(0, len(a))) + b = interface_netmask[i][0][1].asNumbers() + netmask = '.'.join(str(b[i]) for i in range(0, len(b))) + result = self._dict({ + "name" : self._interface_dict[int(interface_index[i][0][1])], + "address" : ip_address, + "netmask" : netmask + }) + results.append(result) + return results @property def RAM_total(self): diff --git a/tests/snmp/openwrt.py b/tests/snmp/openwrt.py index 89d01e5..41d1a7e 100755 --- a/tests/snmp/openwrt.py +++ b/tests/snmp/openwrt.py @@ -55,6 +55,9 @@ def test_interfaces_state(self): def test_interfaces_to_dict(self): self.assertTrue(type(self.device.interfaces_to_dict) == list) + def test_interface_addr_and_mask(self): + self.assertTrue(type(self.interface_addr_and_mask) == list) + def test_RAM_total(self): self.assertTrue(type(self.device.RAM_total) == int)