143 lines
4.4 KiB
Plaintext
143 lines
4.4 KiB
Plaintext
|
## -*- c -*-
|
||
|
######################################################################
|
||
|
## Do the .h file
|
||
|
######################################################################
|
||
|
@open ${name}.h@
|
||
|
/*
|
||
|
* Note: this file originally auto-generated by mib2c
|
||
|
* using mib2c.scalar.conf
|
||
|
*/
|
||
|
#ifndef $name.uc_H
|
||
|
#define $name.uc_H
|
||
|
|
||
|
/* function declarations */
|
||
|
void init_$name(void);
|
||
|
@foreach $i scalar@
|
||
|
Netsnmp_Node_Handler handle_${i};
|
||
|
@end@
|
||
|
|
||
|
#endif /* $name.uc_H */
|
||
|
######################################################################
|
||
|
## Do the .c file
|
||
|
######################################################################
|
||
|
@open ${name}.c@
|
||
|
/*
|
||
|
* Note: this file originally auto-generated by mib2c
|
||
|
* using mib2c.scalar.conf
|
||
|
*/
|
||
|
|
||
|
#include <net-snmp/net-snmp-config.h>
|
||
|
#include <net-snmp/net-snmp-includes.h>
|
||
|
#include <net-snmp/agent/net-snmp-agent-includes.h>
|
||
|
#include "${name}.h"
|
||
|
|
||
|
/** Initializes the $name module */
|
||
|
void
|
||
|
init_$name(void)
|
||
|
{
|
||
|
@foreach $i scalar@
|
||
|
const oid ${i}_oid[] = { $i.commaoid };
|
||
|
@end@
|
||
|
|
||
|
DEBUGMSGTL(("$name", "Initializing\n"));
|
||
|
|
||
|
@foreach $i scalar@
|
||
|
netsnmp_register_scalar(
|
||
|
netsnmp_create_handler_registration("$i", handle_$i,
|
||
|
${i}_oid, OID_LENGTH(${i}_oid),
|
||
|
@if !$i.settable@
|
||
|
HANDLER_CAN_RONLY
|
||
|
@end@
|
||
|
@if $i.settable@
|
||
|
HANDLER_CAN_RWRITE
|
||
|
@end@
|
||
|
));
|
||
|
@end@
|
||
|
}
|
||
|
|
||
|
@foreach $i scalar@
|
||
|
int
|
||
|
handle_$i(netsnmp_mib_handler *handler,
|
||
|
netsnmp_handler_registration *reginfo,
|
||
|
netsnmp_agent_request_info *reqinfo,
|
||
|
netsnmp_request_info *requests)
|
||
|
{
|
||
|
@if $i.settable@
|
||
|
int ret;
|
||
|
@end@
|
||
|
/* We are never called for a GETNEXT if it's registered as a
|
||
|
"instance", as it's "magically" handled for us. */
|
||
|
|
||
|
/* a instance handler also only hands us one request at a time, so
|
||
|
we don't need to loop over a list of requests; we'll only get one. */
|
||
|
|
||
|
switch(reqinfo->mode) {
|
||
|
|
||
|
case MODE_GET:
|
||
|
snmp_set_var_typed_value(requests->requestvb, $i.type,
|
||
|
/* XXX: a pointer to the scalar's data */,
|
||
|
/* XXX: the length of the data in bytes */);
|
||
|
break;
|
||
|
|
||
|
@if $i.settable@
|
||
|
/*
|
||
|
* SET REQUEST
|
||
|
*
|
||
|
* multiple states in the transaction. See:
|
||
|
* http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
|
||
|
*/
|
||
|
case MODE_SET_RESERVE1:
|
||
|
/* or you could use netsnmp_check_vb_type_and_size instead */
|
||
|
ret = netsnmp_check_vb_type(requests->requestvb, $i.type);
|
||
|
if ( ret != SNMP_ERR_NOERROR ) {
|
||
|
netsnmp_set_request_error(reqinfo, requests, ret );
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case MODE_SET_RESERVE2:
|
||
|
/* XXX malloc "undo" storage buffer */
|
||
|
if (/* XXX if malloc, or whatever, failed: */) {
|
||
|
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case MODE_SET_FREE:
|
||
|
/* XXX: free resources allocated in RESERVE1 and/or
|
||
|
RESERVE2. Something failed somewhere, and the states
|
||
|
below won't be called. */
|
||
|
break;
|
||
|
|
||
|
case MODE_SET_ACTION:
|
||
|
/* XXX: perform the value change here */
|
||
|
if (/* XXX: error? */) {
|
||
|
netsnmp_set_request_error(reqinfo, requests, /* some error */);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case MODE_SET_COMMIT:
|
||
|
/* XXX: delete temporary storage */
|
||
|
if (/* XXX: error? */) {
|
||
|
/* try _really_really_ hard to never get to this point */
|
||
|
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case MODE_SET_UNDO:
|
||
|
/* XXX: UNDO and return to previous value for the object */
|
||
|
if (/* XXX: error? */) {
|
||
|
/* try _really_really_ hard to never get to this point */
|
||
|
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);
|
||
|
}
|
||
|
break;
|
||
|
@end@
|
||
|
|
||
|
default:
|
||
|
/* we should never get here, so this is a really bad error */
|
||
|
snmp_log(LOG_ERR, "unknown mode (%d) in handle_${i}\n", reqinfo->mode );
|
||
|
return SNMP_ERR_GENERR;
|
||
|
}
|
||
|
|
||
|
return SNMP_ERR_NOERROR;
|
||
|
}
|
||
|
@end@
|