SNMP_Network_Interfaces fails when snmp returns MAC address in binary (SNMP STRING) format instead of the more typical HEX-STRING format
I've discovered an issue with the new SNMP_Network_Interfaces DataSource if it finds that a device returns MAC addresses in STRING (binary) format instead of the more typical HEX-STRING ("xx:xx:xx:xx:xx:xx") format. You can see the issue if you walk .1.3.6.1.2.1.2.2.1.6 and see MAC addresses that look like "Lr 3a#". We found this was happening to only a very few Cisco switches out of hundreds but when it happens the interface instance doesn't show up in LogicMonitor. I was able to add some code to the DataSource AD script to account for the problem as shown below. We have not yet implemented across everything yet but looks good so far. I did provide this over to LM Support.
It appears the LM snmp calls in groovy doesn't support forcing a particular outputs like hex-string. Also if anyone knows why Cisco equipment might not use hex-string in snmp queries for some almost-random ports I would be interested to know. Thanks!
def extractInterfaces(host, options, timeout) { def ifTable = [:] // Extract interfaces Snmp.walkAsMap(host, "1.3.6.1.2.1.2.2.1.6", null, 160000).each { ifIndex, mac -> def entry = ifTable.get(ifIndex, ["ifIndex": ifIndex]) //Check if we might have gotten the MAC in STRING (binary) format instead of HEX-STRING // and convert to hex format if (mac.length() == 6) { byte[] macByte = mac mac = macByte.encodeHex().toString() } entry.mac = mac ifTable[ifIndex] = entry } getSnmpField(host, ifTable, "type", "1.3.6.1.2.1.2.2.1.3") getSnmpField(host, ifTable, "mtu", "1.3.6.1.2.1.2.2.1.4") getSnmpField(host, ifTable, "highspeed", "1.3.6.1.2.1.31.1.1.1.15") getSnmpField(host, ifTable, "description", "1.3.6.1.2.1.2.2.1.2") getSnmpField(host, ifTable, "alias", "1.3.6.1.2.1.31.1.1.1.18") getSnmpField(host, ifTable, "name", "1.3.6.1.2.1.2.2.1.2") return ifTable }