Hi.

snmpd(8) uses unsigned ints internally to represent the size and used
space of a file system. The HOST-RESOURCES-MIB defines the valid
values for those OIDs as 0..2147483647. With sufficiently large file
systems, this can cause negative numbers to be returned for the size
and used space OIDs.

.1.3.6.1.2.1.25.2.3.1.5.36=-1573167768

At sthen's suggestion, do what net-snmp does and fiddle with the
values to prevent wrapping. Yes this mucks with the actual values of
size, used space, and block size, but it allows snmpd to convey the
proper size and used space of the file system which is what most
everybody is really interested in.

In case gmail hoses this diff, it's also here:
https://www.packetmischief.ca/files/patches/snmpd.hrstorage2.diff


Index: usr.sbin/snmpd/mib.c
===================================================================
RCS file: /data/cvs-mirror/OpenBSD/src/usr.sbin/snmpd/mib.c,v
retrieving revision 1.80
diff -p -u -r1.80 mib.c
--- usr.sbin/snmpd/mib.c 17 Nov 2015 12:30:23 -0000 1.80
+++ usr.sbin/snmpd/mib.c 19 Feb 2017 20:01:46 -0000
@@ -643,6 +643,14 @@ mib_hrstorage(struct oid *oid, struct be
  units = mnt->f_bsize;
  size = mnt->f_blocks;
  used = mnt->f_blocks - mnt->f_bfree;
+
+ /* for large filesystems, do not overflow hrStorageSize */
+ while (size > INT32_MAX) {
+ size = size >> 1;
+ units = units << 1;
+ used = used >> 1;
+ }
+
  sop = &so[3];
  break;
  }




.joel

Reply via email to