What is a good way to show a floating point number via SNMP?

Robert picture Robert · Jan 26, 2010 · Viewed 8.6k times · Source

I am coding an SNMP Agent. I need to send values that have a decimal point to an SNMP Manager.

I have a couple options:

  1. Truncate the number.
  2. Multiply by a constant.
  3. Ask Stackoverflow.

If I truncate the number I lose a lot of information that I need.

If I multiply by a constant, then the manager will display strange units that the end-user would rather not see. (grams instead of kilograms).

So, I'm doing option 3. What do I do?

Answer

Michael Kirkham picture Michael Kirkham · Jan 27, 2010

The usual, standard way this is done is to define a TEXTUAL-CONVENTION with an integral type (such as Integer32 or Unsigned32) and a DISPLAY-HINT with "d-N" format, where N is the number of places the decimal should be shifted for display purposes.

Thus, for a value with a single decimal place ranging from (say) 0.0 to 10.0, you would use a TEXTUAL-CONVENTION of type Unsigned32(0..100) and a DISPLAY-HINT of "d-1". On the wire, the value ranges from 0 to 100, but the manager (by way of the MIB module being loaded) will shift the decimal one place to display a range of 0.0 to 10.0.

Other ways of doing it are not conducive to interoperability.