summaryrefslogtreecommitdiffstats
path: root/contrib/bsnmp/snmpd/action.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bsnmp/snmpd/action.c')
-rw-r--r--contrib/bsnmp/snmpd/action.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/contrib/bsnmp/snmpd/action.c b/contrib/bsnmp/snmpd/action.c
index 4f6f817..54a5d29 100644
--- a/contrib/bsnmp/snmpd/action.c
+++ b/contrib/bsnmp/snmpd/action.c
@@ -40,6 +40,7 @@
#include <sys/utsname.h>
#include <ctype.h>
#include <errno.h>
+#include <inttypes.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -219,6 +220,21 @@ save_boots:
return (0);
}
+void
+update_snmpd_engine_time(void)
+{
+ uint64_t etime;
+
+ etime = (get_ticks() - start_tick) / 100ULL;
+ if (etime < INT32_MAX)
+ snmpd_engine.engine_time = etime;
+ else {
+ start_tick = get_ticks();
+ (void)set_snmpd_engine();
+ snmpd_engine.engine_time = start_tick;
+ }
+}
+
/*************************************************************
*
* System group
@@ -1118,7 +1134,7 @@ op_snmp_engine(struct snmp_context *ctx __unused, struct snmp_value *value,
value->v.integer = snmpd_engine.engine_boots;
break;
case LEAF_snmpEngineTime:
- snmpd_engine.engine_time = (get_ticks() - start_tick) / 100ULL;
+ update_snmpd_engine_time();
value->v.integer = snmpd_engine.engine_time;
break;
case LEAF_snmpEngineMaxMessageSize:
OpenPOWER on IntegriCloud