diff -ur svn_bsnmp/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt bsnmp-tmp/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt --- svn_bsnmp/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt 2009-08-03 20:15:41.000000000 +0300 +++ bsnmp-tmp/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt 2009-08-03 20:32:35.000000000 +0300 @@ -39,7 +39,7 @@ FROM BEGEMOT-IP-MIB; begemotMib2 MODULE-IDENTITY - LAST-UPDATED "200602130000Z" + LAST-UPDATED "200908030000Z" ORGANIZATION "German Aerospace Center" CONTACT-INFO " Hartmut Brandt @@ -54,6 +54,12 @@ E-mail: harti@freebsd.org" DESCRIPTION "The MIB for private mib2 stuff." + REVISION "200908030000Z" + DESCRIPTION + "Second edition adds begemotIfDataPoll object." + REVISION "200602130000Z" + DESCRIPTION + "Initial revision." ::= { begemotIp 1 } begemotIfMaxspeed OBJECT-TYPE @@ -87,4 +93,14 @@ bit rate in its MIB." ::= { begemotMib2 3 } +begemotIfDataPoll OBJECT-TYPE + SYNTAX TimeTicks + UNITS "seconds" + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "The rate at which the mib2 module will poll interface data." + DEFVAL { 10 } + ::= { begemotMib2 4 } + END diff -ur svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII.c bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII.c --- svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII.c 2009-08-03 20:15:41.000000000 +0300 +++ bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII.c 2009-08-03 22:37:55.000000000 +0300 @@ -117,6 +117,15 @@ /* HC update timer handle */ static void *hc_update_timer; +/* Idle poll timer */ +static void *mibII_poll_timer; + +/* interfaces' data poll interval */ +u_int mibII_poll_ticks; + +/* Idle poll hook */ +static void mibII_idle(void *arg __unused); + /*****************************/ static const struct asn_oid oid_ifMIB = OIDX_ifMIB; @@ -410,6 +419,20 @@ mibif_hc_update_interval = ticks; } +/** + * Restart the idle poll timer. + */ +void +mibif_restart_mibII_poll_timer(void) +{ + if (mibII_poll_timer != NULL) + timer_stop(mibII_poll_timer); + + if ((mibII_poll_timer = timer_start_repeat(mibII_poll_ticks * 10, + mibII_poll_ticks * 10, mibII_idle, NULL, module)) == NULL) + syslog(LOG_ERR, "timer_start(%u): %m", mibII_poll_ticks); +} + /* * Fetch new MIB data. */ @@ -1553,7 +1576,7 @@ * Idle function */ static void -mibII_idle(void) +mibII_idle(void *arg __unused) { struct mibifa *ifa; @@ -1608,6 +1631,10 @@ ipForward_reg = or_register(&oid_ipForward, "The MIB module for the display of CIDR multipath IP Routes.", module); + + mibII_poll_timer = NULL; + mibII_poll_ticks = MIBII_POLL_TICKS; + mibif_restart_mibII_poll_timer(); } /* @@ -1651,6 +1678,11 @@ static int mibII_fini(void) { + if (mibII_poll_timer != NULL ) { + timer_stop(mibII_poll_timer); + mibII_poll_timer = NULL; + } + if (route_fd != NULL) fd_deselect(route_fd); if (route != -1) @@ -1690,7 +1722,7 @@ "This module implements the interface and ip groups.", mibII_init, mibII_fini, - mibII_idle, /* idle */ + NULL, /* idle */ NULL, /* dump */ NULL, /* config */ mibII_start, diff -ur svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII.h bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII.h --- svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII.h 2009-08-03 20:15:41.000000000 +0300 +++ bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII.h 2009-08-03 22:41:02.000000000 +0300 @@ -211,6 +211,14 @@ /* re-compute update interval */ void mibif_reset_hc_timer(void); +/* interfaces' data poll interval */ +extern u_int mibII_poll_ticks; + +/* restart the data poll timer */ +void mibif_restart_mibII_poll_timer(void); + +#define MIBII_POLL_TICKS 10 + /* get interfaces and interface addresses. */ void mib_fetch_interfaces(void); diff -ur svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII_begemot.c bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII_begemot.c --- svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII_begemot.c 2009-08-03 20:15:41.000000000 +0300 +++ bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII_begemot.c 2009-08-03 22:36:56.000000000 +0300 @@ -59,6 +59,11 @@ ctx->scratch->int1 = mibif_force_hc_update_interval; mibif_force_hc_update_interval = value->v.uint32; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + ctx->scratch->int1 = mibII_poll_ticks; + mibII_poll_ticks = value->v.uint32; + return (SNMP_ERR_NOERROR); } abort(); @@ -68,6 +73,10 @@ case LEAF_begemotIfForcePoll: mibif_force_hc_update_interval = ctx->scratch->int1; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + mibII_poll_ticks = ctx->scratch->int1; + return (SNMP_ERR_NOERROR); } abort(); @@ -78,6 +87,10 @@ mibif_force_hc_update_interval = ctx->scratch->int1; mibif_reset_hc_timer(); return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + mibif_restart_mibII_poll_timer(); + return (SNMP_ERR_NOERROR); } abort(); } @@ -98,6 +111,10 @@ case LEAF_begemotIfForcePoll: value->v.uint32 = mibif_force_hc_update_interval; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + value->v.uint32 = mibII_poll_ticks; + return (SNMP_ERR_NOERROR); } abort(); } diff -ur svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII_tree.def bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII_tree.def --- svn_bsnmp/contrib/bsnmp/snmp_mibII/mibII_tree.def 2009-08-03 20:15:41.000000000 +0300 +++ bsnmp-tmp/contrib/bsnmp/snmp_mibII/mibII_tree.def 2009-08-03 20:52:12.000000000 +0300 @@ -240,6 +240,7 @@ (1 begemotIfMaxspeed COUNTER64 op_begemot_mibII GET) (2 begemotIfPoll TIMETICKS op_begemot_mibII GET) (3 begemotIfForcePoll TIMETICKS op_begemot_mibII GET SET) + (4 begemotIfDataPoll TIMETICKS op_begemot_mibII GET SET) ) ) )