SNMPALARM(3) Net-SNMP SNMPALARM(3)
NAME
snmpalarmregister, snmpalarmregisterhr, snmpalarmunregister -
alarm functions
SYNOPSIS
##include <>
unsigned int
snmpalarmregister(unsigned int seconds,,
unsigned int flags,,
SNMPAlarmCallback **fcallback,,
void **clientarg);;
unsigned int
snmpalarmregisterhr(struct timeval t,,
unsigned int flags,,
SNMPAlarmCallback **fcallback,,
void **clientarg);;
void
snmpalarmunregister(unsigned int reg);;
DESCRIPTION
These functions implement support for a generic timer handling mecha-
nism for multiple parts of an application to register function call-
backs to happen at a particular time in the future.
USAGE
The usage is fairly simple and straight-forward: Simply create a func-
tion you want called back at some point in the future. The function
definition should be similar to:
void mycallback(unsigned int reg,, void **clientarg);;
Then, call snmpalarmregister() to register your callback to be called
seconds from now. The flags field should either be SAREPEAT or NUL.
If flags is set with SAREPEAT, then the registered callback function
will be called every seconds. If flags is NUL then the function will
only be called once and then removed from the alarm system registra-
tion.
The clientarg parameter in the registration function is used only by
the client function and is stored and passed back directly to them on
every call to the system.
The snmpalarmregister() function returns a unique unsigned int (which
is also passed as the first argument of each callback), which can then
be used to remove the callback from the queue at a later point in the
future using the snmpalarmunregister() function. If the
snmpalarmregister() call fails it returns zero. In particular, note
that it is entirely permissible for an alarm function to unregister
itself.
The snmpalarmregisterhr() function is identical in operation to the
snmpalarmregister() function, but takes a struct timeval as a first
parameter, and schedules the callback after the period represented by t
(the letters hr stand for "high resolution"). The operation of this
function is dependent on the provision of the setitimer(2) system call
by the operating system. If this system call is not available, the
alarm will be scheduled as if snmpalarmregister() had been called
with a first argument equal to the value of the tvsec member of t.
See, however, the notes below.
INITIALIZATION
The initsnmp() function initialises the snmpalarm subsystem by call-
ing initsnmpalarm() and then initalarmpostconfig() to set up the
first timer to initialise the callback function. These two functions
should not be used directly by applications.
NOTES
The default behaviour of the snmpalarm subsystem is to request SIGALRM
signals from the operating system via the alarm(2) or setitimer(2) sys-
tem calls. This has the disadvantage, however, that no other part of
the application can use the SIGLARM functionality (or, if some other
part of the application does use the SIGALRM functionality, the
snmpalarm subsystem will not work correctly).
If your application runs a select(2)-based event loop, however, there
is no need to use SIGALRM for the snmpalarm subsystem, leaving it
available for other parts of the application. This is done by making
the following call:
netsnmpdssetboolean(NETSNMPDSLIBRARYID,
NETSNMPDSLIBALARMDONTUSESIG, 1);
before calling initsnmp(). Then, snmpselectinfo() takes alarms into
account when calculating the timeout value to be used for select(2).
All you need to do is call runalarms() when select(2) times out
(return value of zero). This is the approach taken in the agent; see
snmpd.c. Furthermore, when using this method, high resolution alarms
do not depend on the presence of the setitimer(2) system call, although
overall precision is of course still determined by the underlying oper-
ating system. Recommended.
SEE ALSO
snmpapi(3), defaultstore(3), snmpselectinfo(3), alarm(2),
setitimer(2), select(2)
4.2 Berkeley Distribution 07 Mar 2002 SNMPALARM(3)
|