/*
 * snmpMPDStats.c: tallies errors for SNMPv3 message processing. 
 */

#include <net-snmp/net-snmp-config.h>

#if HAVE_WINSOCK_H
#include <winsock.h>
#endif

#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <net-snmp/agent/sysORTable.h>

#include "snmpMPDStats.h"
#include "util_funcs/header_generic.h"


struct variable2 snmpMPDStats_variables[] = {
    {SNMPUNKNOWNSECURITYMODELS, ASN_COUNTER, NETSNMP_OLDAPI_RONLY,
     var_snmpMPDStats, 1, {1}},
    {SNMPINVALIDMSGS, ASN_COUNTER, NETSNMP_OLDAPI_RONLY,
     var_snmpMPDStats, 1, {2}},
    {SNMPUNKNOWNPDUHANDLERS, ASN_COUNTER, NETSNMP_OLDAPI_RONLY,
     var_snmpMPDStats, 1, {3}},
};

/*
 * now load this mib into the agents mib table 
 */
oid             snmpMPDStats_variables_oid[] =
    { 1, 3, 6, 1, 6, 3, 11, 2, 1 };

void
init_snmpMPDStats(void)
{
    static oid      reg[] = { 1, 3, 6, 1, 6, 3, 11, 3, 1, 1 };
    REGISTER_SYSOR_ENTRY(reg,
                         "The MIB for Message Processing and Dispatching.");
    REGISTER_MIB("snmpv3/snmpMPDStats", snmpMPDStats_variables, variable2,
                 snmpMPDStats_variables_oid);
}

u_char         *
var_snmpMPDStats(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;
    int             tmagic;


    *write_method = 0;          /* assume it isnt writable for the time being */
    *var_len = sizeof(long_ret);        /* assume an integer and change later if not */

    if (header_generic(vp, name, length, exact, var_len, write_method))
        return 0;

    /*
     * this is where we do the value assignments for the mib results. 
     */
    tmagic = vp->magic;
    if ((tmagic >= 0)
        && (tmagic <= (STAT_MPD_STATS_END - STAT_MPD_STATS_START))) {
        long_ret = snmp_get_statistic(tmagic + STAT_MPD_STATS_START);
        return (unsigned char *) &long_ret;
    }
    return 0;
}
