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