## -*- c -*-
######################################################################
## Do the .h file
######################################################################
@open ${name}.h@
/*
 * Note: this file originally auto-generated by mib2c using
 *        $Id$
 */
#ifndef $name.uc_H
#define $name.uc_H

/* function declarations */
@foreach $i notifications@
int send_${i}_trap(void);
@end@

#endif /* $name.uc_H */
######################################################################
## Do the .c file
######################################################################
@open ${name}.c@
/*
 * Note: this file originally auto-generated by mib2c using
 *        $Id$
 */

#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"

extern const oid snmptrap_oid[];
extern const size_t snmptrap_oid_len;

@foreach $i notifications@
int
send_${i}_trap( void )
{
    netsnmp_variable_list  *var_list = NULL;
    const oid ${i}_oid[] = { $i.commaoid };
    @foreach $v varbinds@
    @if $v.isscalar@
    const oid ${v}_oid[] = { $v.commaoid, 0 };
    @end@
    @if !$v.isscalar@
    const oid ${v}_oid[] = { $v.commaoid, /* insert index here */ };
    @end@
    @end@

    /*
     * Set the snmpTrapOid.0 value
     */
    snmp_varlist_add_variable(&var_list,
        snmptrap_oid, snmptrap_oid_len,
        ASN_OBJECT_ID,
        ${i}_oid, sizeof(${i}_oid));
    
    @if count_varbinds($i) > 0@
    /*
     * Add any objects from the trap definition
     */
    @end@
    @foreach $v varbinds@
    snmp_varlist_add_variable(&var_list,
        ${v}_oid, OID_LENGTH(${v}_oid),
        $v.type,
        /* Set an appropriate value for $v */
        NULL, 0);
    @end@

    /*
     * Add any extra (optional) objects here
     */

    /*
     * Send the trap to the list of configured destinations
     *  and clean up
     */
    send_v2trap( var_list );
    snmp_free_varbind( var_list );

    return SNMP_ERR_NOERROR;
}
@end@
