diff options
Diffstat (limited to 'agent/mibgroup/util_funcs/header_generic.c')
-rw-r--r-- | agent/mibgroup/util_funcs/header_generic.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/agent/mibgroup/util_funcs/header_generic.c b/agent/mibgroup/util_funcs/header_generic.c new file mode 100644 index 0000000..9154be9 --- /dev/null +++ b/agent/mibgroup/util_funcs/header_generic.c @@ -0,0 +1,64 @@ +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> + +#include "header_generic.h" + +/* + * header_generic(... + * Arguments: + * vp IN - pointer to variable entry that points here + * name IN/OUT - IN/name requested, OUT/name found + * length IN/OUT - length of IN/OUT oid's + * exact IN - TRUE if an exact match was requested + * var_len OUT - length of variable or 0 if function returned + * write_method + * + */ + +/*******************************************************************-o-****** + * generic_header + * + * Parameters: + * *vp (I) Pointer to variable entry that points here. + * *name (I/O) Input name requested, output name found. + * *length (I/O) Length of input and output oid's. + * exact (I) TRUE if an exact match was requested. + * *var_len (O) Length of variable or 0 if function returned. + * (**write_method) Hook to name a write method (UNUSED). + * + * Returns: + * MATCH_SUCCEEDED If vp->name matches name (accounting for exact bit). + * MATCH_FAILED Otherwise, + * + * + * Check whether variable (vp) matches name. + */ +int +header_generic(struct variable *vp, + oid * name, + size_t * length, + int exact, size_t * var_len, WriteMethod ** write_method) +{ + oid newname[MAX_OID_LEN]; + int result; + + DEBUGMSGTL(("util_funcs", "header_generic: ")); + DEBUGMSGOID(("util_funcs", name, *length)); + DEBUGMSG(("util_funcs", " exact=%d\n", exact)); + + memcpy((char *) newname, (char *) vp->name, + (int) vp->namelen * sizeof(oid)); + newname[vp->namelen] = 0; + result = snmp_oid_compare(name, *length, newname, vp->namelen + 1); + DEBUGMSGTL(("util_funcs", " result: %d\n", result)); + if ((exact && (result != 0)) || (!exact && (result >= 0))) + return (MATCH_FAILED); + memcpy((char *) name, (char *) newname, + ((int) vp->namelen + 1) * sizeof(oid)); + *length = vp->namelen + 1; + + *write_method = (WriteMethod*)0; + *var_len = sizeof(long); /* default to 'long' results */ + return (MATCH_SUCCEEDED); +} |