## -*- c -*- ###################################################################### ## Do the .h file ###################################################################### @open ${name}.h@ /* * Note: this file originally auto-generated by mib2c * using mib2c.old-api.conf */ #ifndef $name.uc_H #define $name.uc_H /* function declarations */ void init_$name(void); FindVarMethod var_$name; @foreach $i table@ FindVarMethod var_${i}; @end@ @foreach $i scalar@ @if $i.settable@ WriteMethod write_${i}; @end@ @end@ @foreach $i table@ @foreach $c column@ @if $c.settable@ WriteMethod write_${c}; @end@ @end@ @end@ #endif /* $name.uc_H */ ###################################################################### ## Do the .c file ###################################################################### @open ${name}.c@ /* * Note: this file originally auto-generated by mib2c * using mib2c.old-api.conf */ #include #include #include #include "${name}.h" /* * ${name}_variables_oid: * this is the top level oid that we want to register under. This * is essentially a prefix, with the suffix appearing in the * variable below. */ oid ${name}_variables_oid[] = { $name.commaoid }; /* * variable4 ${name}_variables: * this variable defines function callbacks and type return information * for the $name mib section */ struct variable4 ${name}_variables[] = { /* magic number , variable type , ro/rw , callback fn , L, oidsuffix */ @eval $magic = 0@ @eval $namelen = length("$name.commaoid")@ @foreach $i scalar@ @eval $magic = $magic + 1@ @eval $suffix = substr("$i.commaoid", $namelen + 1)@ @eval $suffixlen = $i.oidlength - $name.oidlength@ #define $i.uc $magic @if $i.settable@ {$i.uc, $i.type, NETSNMP_OLDAPI_RWRITE, var_${name}, $suffixlen, { $suffix }}, @end@ @if !$i.settable@ {$i.uc, $i.type, NETSNMP_OLDAPI_RONLY, var_${name}, $suffixlen, { $suffix }}, @end@ @end@ @foreach $i table@ @eval $magic = 0@ @eval $nlen2 = length("$i.commaoid")@ @if $nlen2 > $namelen@ @eval $suffix = substr("$i.commaoid", $namelen + 1)@ @eval $ctmp = ","@ @else@ @eval $suffix = ""@ @eval $ctmp = ""@ @end@ @eval $suffixlen = $i.oidlength - $name.oidlength + 2@ @foreach $c column@ @eval $magic = $magic + 1@ #define $c.uc $magic @if $c.settable@ {$c.uc, $c.type, NETSNMP_OLDAPI_RWRITE, var_${i}, $suffixlen, { $suffix $ctmp 1, $c.subid }}, @end@ @if !$c.settable@ {$c.uc, $c.type, NETSNMP_OLDAPI_RONLY, var_${i}, $suffixlen, { $suffix $ctmp 1, $c.subid }}, @end@ @end@ @end@ }; /* (L = length of the oidsuffix) */ /** Initializes the $name module */ void init_$name(void) { DEBUGMSGTL(("$name", "Initializing\n")); /* register ourselves with the agent to handle our mib tree */ REGISTER_MIB("$name", ${name}_variables, variable4, ${name}_variables_oid); /* place any other initialization junk you need here */ } /* * var_$name(): * This function is called every time the agent gets a request for * a scalar variable that might be found within your mib section * registered above. It is up to you to do the right thing and * return the correct value. * You should also correct the value of "var_len" if necessary. * * Please see the documentation for more information about writing * module extensions, and check out the examples in the examples * and mibII directories. */ unsigned char * var_$name(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { /* variables we may use later */ static long long_ret; static u_long ulong_ret; static unsigned char string[SPRINT_MAX_LEN]; static oid objid[MAX_OID_LEN]; static struct counter64 c64; if (header_generic(vp,name,length,exact,var_len,write_method) == MATCH_FAILED ) return NULL; /* * this is where we do the value assignments for the mib results. */ switch(vp->magic) { @foreach $i scalar@ case $i.uc: @if $i.settable@ *write_method = write_${i}; @end@ VAR = VALUE; /* XXX */ return (u_char*) &VAR; @end@ default: ERROR_MSG(""); } return NULL; } @foreach $i table@ /* * var_$i(): * Handle this table separately from the scalar value case. * The workings of this are basically the same as for var_$name above. */ unsigned char * var_$i(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { /* variables we may use later */ static long long_ret; static u_long ulong_ret; static unsigned char string[SPRINT_MAX_LEN]; static oid objid[MAX_OID_LEN]; static struct counter64 c64; /* * This assumes that the table is a 'simple' table. * See the implementation documentation for the meaning of this. * You will need to provide the correct value for the TABLE_SIZE parameter * * If this table does not meet the requirements for a simple table, * you will need to provide the replacement code yourself. * Mib2c is not smart enough to write this for you. * Again, see the implementation documentation for what is required. */ if (header_simple_table(vp,name,length,exact,var_len,write_method, TABLE_SIZE) == MATCH_FAILED ) return NULL; /* * this is where we do the value assignments for the mib results. */ switch(vp->magic) { @foreach $c column@ case $c.uc: @if $c.settable@ *write_method = write_${c}; @end@ VAR = VALUE; /* XXX */ return (u_char*) &VAR; @end@ default: ERROR_MSG(""); } return NULL; } @end@ @foreach $i scalar@ @if $i.settable@ int write_$i(int action, u_char *var_val, u_char var_val_type, size_t var_val_len, u_char *statP, oid *name, size_t name_len) { $i.decl value; int size; switch ( action ) { case RESERVE1: if (var_val_type != $i.type) { fprintf(stderr, "write to $name not $i.type\n"); return SNMP_ERR_WRONGTYPE; } if (var_val_len > sizeof($i.decl)) { fprintf(stderr,"write to $name: bad length\n"); return SNMP_ERR_WRONGLENGTH; } break; case RESERVE2: size = var_val_len; value = * ($i.decl *) var_val; break; case FREE: /* Release any resources that have been allocated */ break; case ACTION: /* * The variable has been stored in 'value' for you to use, * and you have just been asked to do something with it. * Note that anything done here must be reversable in the UNDO case */ break; case UNDO: /* Back out any changes made in the ACTION case */ break; case COMMIT: /* * Things are working well, so it's now safe to make the change * permanently. Make sure that anything done here can't fail! */ break; } return SNMP_ERR_NOERROR; } @end@ @end@ @foreach $i table@ @foreach $c column@ @if $c.settable@ int write_$c(int action, u_char *var_val, u_char var_val_type, size_t var_val_len, u_char *statP, oid *name, size_t name_len) { $c.decl value; int size; switch ( action ) { case RESERVE1: if (var_val_type != $c.type) { fprintf(stderr, "write to $name not $c.type\n"); return SNMP_ERR_WRONGTYPE; } if (var_val_len > sizeof($c.decl)) { fprintf(stderr,"write to $name: bad length\n"); return SNMP_ERR_WRONGLENGTH; } break; case RESERVE2: size = var_val_len; value = * ($c.decl *) var_val; break; case FREE: /* Release any resources that have been allocated */ break; case ACTION: /* * The variable has been stored in 'value' for you to use, * and you have just been asked to do something with it. * Note that anything done here must be reversable in the UNDO case */ break; case UNDO: /* Back out any changes made in the ACTION case */ break; case COMMIT: /* * Things are working well, so it's now safe to make the change * permanently. Make sure that anything done here can't fail! */ break; } return SNMP_ERR_NOERROR; } @end@ @end@ @end@