raiff
April 26, 2018, 5:29pm
1
Hello
I try to obtain via SNMP the speed of an interface of type infiniband
Here is what I’ve done:
snmpget -v 2c -c public t26 ifDescr.9 ifType.9 ifSpeed.9
IF-MIB::ifDescr.9 = STRING: ib0
IF-MIB::ifType.9 = INTEGER: infiniband(199)
IF-MIB::ifSpeed.9 = Gauge32: 0
ifSpeed is not correct.
ibstat or ibstatus give me the right value :
ssh t28 ibstatus | grep rate
rate: 100 Gb/sec (4X EDR)
Is there a private MIB to get the right value ?
Thanks
raiff
May 10, 2018, 7:08pm
2
Query is directed at host where the MELLANOX HCA is installed. Host runs linux centos 7 net-snmp agent. I can obtain ifDescr (ib0) or ifType (infiniband) but ifSpeed and ifXHighSpeed are returned as zero.
Host is direct connected with another one (no switch)
Thanks
hal1
May 10, 2018, 8:28pm
3
speed is not currently populated in agent. Look at net-snmp / Code / [40c09d] /agent/mibgroup/if-mib/data_access/interface_linux.c net-snmp / Code / [0d3c27] /agent/mibgroup/if-mib/data_access/interface_linux.c
You can see there’s routine netsnmp_linux_interface_get_if_speed which is conditionally compiled depending on ethtool but it’s only called for ifTypes of IANAIFTYPE_ETHERNETCSMACD.
Currently, it looks like it calls netsnmp_access_interface_entry_guess_speed which is in interface.c which is:
void
netsnmp_access_interface_entry_guess_speed(netsnmp_interface_entry *entry)
{
if (entry->type == IANAIFTYPE_ETHERNETCSMACD)
entry->speed = 10000000;
else if (entry->type == IANAIFTYPE_SOFTWARELOOPBACK)
entry->speed = 10000000;
else if (entry->type == IANAIFTYPE_ISO88025TOKENRING)
entry->speed = 4000000;
else
entry->speed = 0;
entry->speed_high = entry->speed / 1000000LL;
}
so speed is 0.
Are you building your own agent ? If so, I’ll dig a little deeper on this.
raiff
April 27, 2018, 8:26am
4
Precision : ifHighSpeed give the same zero value (100000 expected for EDRX4).
hal1
May 10, 2018, 2:12pm
5
Is the SNMP query directed at a host or managed switch ? What is the SNMP agent being used on the host or the managed switch ?
raiff
June 5, 2018, 8:16am
6
Thanks for your response and suggestion
My need is integration in supervision platform (Nagios).
I’ve done it (read and display connection speed) by Nagios NRPE + ibstat commands.
But I would like to implement by the standard SNMP way.
I was surprised to see SNMP agent does not return the correct value, as ethtool (or ibstat) do.
Tests :
[root@t25 ~]# snmpget -c public -v 2c localhost ifType.9
IF-MIB::ifType.9 = INTEGER: infiniband(199)
[root@t25 ~]# snmpget -c public -v 2c localhost ifDescr.9
IF-MIB::ifDescr.9 = STRING: ib0
[root@t25 ~]# snmpget -c public -v 2c localhost ifHighSpeed.9
IF-MIB::ifHighSpeed.9 = Gauge32: 0
[root@t25 ~]# ethtool ib0 | grep Speed
Speed: 100000Mb/s
Shouldn’t agent procedure netsnmp_linux_interface_get_if_speed_mii(…) in net-snmp / Code / [21b005] /agent/mibgroup/if-mib/data_access/interface_linux.c https://sourceforge.net/p/net-snmp/code/ci/master/tree/agent/mibgroup/if-mib/data_access/interface_linux.c#l1008 return the correct value ?
Unfortunately, I don’t have the necessary skills or experience to modify the code of the agent…
Regards