⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mteevent.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * DisMan Event MIB: *     Core implementation of the event handling behaviour */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include "disman/event/mteEvent.h"#include "disman/event/mteTrigger.h"#include "disman/event/mteObjects.h"netsnmp_tdata *event_table_data;    /*     * Initialize the container for the (combined) mteEvent*Table,     * regardless of which table initialisation routine is called first.     */voidinit_event_table_data(void){    DEBUGMSGTL(("disman:event:init", "init event container\n"));    if (!event_table_data) {        event_table_data = netsnmp_tdata_create_table("mteEventTable", 0);        DEBUGMSGTL(("disman:event:init", "create event container (%x)\n",                                      event_table_data));    }}void _init_default_mteEvent( const char *event, const char *oname, int specific );void _init_link_mteEvent(    const char *event, const char *oname, int specific );void _init_builtin_mteEvent( const char *event, const char *oname,                            oid *trapOID, size_t trapOID_len );/** Initializes the mteEvent module */voidinit_mteEvent(void){    static int _defaults_init = 0;    init_event_table_data();    /*     * Insert fixed events for the default trigger notifications     */    if ( _defaults_init)        return;    _init_default_mteEvent( "mteTriggerFired",    "_triggerFire", 1 );    _init_default_mteEvent( "mteTriggerRising",   "_triggerFire", 2 );    _init_default_mteEvent( "mteTriggerFalling",  "_triggerFire", 3 );    _init_default_mteEvent( "mteTriggerFailure",  "_triggerFail", 4 );    _init_link_mteEvent( "linkDown", "_linkUpDown", 3 );    _init_link_mteEvent( "linkUp",   "_linkUpDown", 4 );    _defaults_init = 1;}void_init_builtin_mteEvent( const char *event, const char *oname, oid *trapOID, size_t trapOID_len ){    char ename[ MTE_STR1_LEN+1 ];    netsnmp_tdata_row *row;    struct mteEvent   *entry;    memset(ename, 0, sizeof(ename));    ename[0] = '_';    memcpy(ename+1, event, strlen(event));    row = mteEvent_createEntry( "_snmpd", ename, 1 );    if (!row || !row->data)        return;    entry = (struct mteEvent *)row->data;    entry->mteEventActions     = MTE_EVENT_NOTIFICATION;    entry->mteNotification_len = trapOID_len;    memcpy( entry->mteNotification, trapOID, trapOID_len*sizeof(oid));    memcpy( entry->mteNotifyOwner, "_snmpd", 6 );    memcpy( entry->mteNotifyObjects,  oname, strlen(oname));    entry->flags |= MTE_EVENT_FLAG_ENABLED|                    MTE_EVENT_FLAG_ACTIVE|                    MTE_EVENT_FLAG_VALID;}void_init_default_mteEvent( const char *event, const char *oname, int specific ){    oid    mteTrapOID[]   = {1, 3, 6, 1, 2, 1, 88, 2, 0, 99 /* placeholder */};    size_t mteTrapOID_len = OID_LENGTH(mteTrapOID);    mteTrapOID[ mteTrapOID_len-1 ] = specific;   _init_builtin_mteEvent( event, oname, mteTrapOID, mteTrapOID_len );}void_init_link_mteEvent( const char *event, const char *oname, int specific ){    oid    mteTrapOID[]   = {1, 3, 6, 1, 6, 3, 1, 1, 5, 99 /* placeholder */};    size_t mteTrapOID_len = OID_LENGTH(mteTrapOID);    mteTrapOID[ mteTrapOID_len-1 ] = specific;   _init_builtin_mteEvent( event, oname, mteTrapOID, mteTrapOID_len );}    /* ===================================================     *     * APIs for maintaining the contents of the (combined)     *    mteEvent*Table container.     *     * =================================================== */void_mteEvent_dump(void){    struct mteEvent *entry;    netsnmp_tdata_row *row;    int i = 0;    for (row = netsnmp_tdata_row_first(event_table_data);         row;         row = netsnmp_tdata_row_next(event_table_data, row)) {        entry = (struct mteEvent *)row->data;        DEBUGMSGTL(("disman:event:dump", "EventTable entry %d: ", i));        DEBUGMSGOID(("disman:event:dump", row->oid_index.oids, row->oid_index.len));        DEBUGMSG(("disman:event:dump", "(%s, %s)",                                         row->indexes->val.string,                                         row->indexes->next_variable->val.string));        DEBUGMSG(("disman:event:dump", ": %x, %x\n", row, entry));        i++;    }    DEBUGMSGTL(("disman:event:dump", "EventTable %d entries\n", i));}/* * Create a new row in the event table  */netsnmp_tdata_row *mteEvent_createEntry(const char *mteOwner, const char *mteEName, int fixed){    struct mteEvent *entry;    netsnmp_tdata_row *row;    size_t mteOwner_len = (mteOwner) ? strlen(mteOwner) : 0;    size_t mteEName_len = (mteEName) ? strlen(mteEName) : 0;    DEBUGMSGTL(("disman:event:table", "Create event entry (%s, %s)\n",                                       mteOwner, mteEName));    /*     * Create the mteEvent entry, and the     * (table-independent) row wrapper structure...     */    entry = SNMP_MALLOC_TYPEDEF(struct mteEvent);    if (!entry)        return NULL;    row = netsnmp_tdata_create_row();    if (!row) {        SNMP_FREE(entry);        return NULL;    }    row->data = entry;    /*     * ... initialize this row with the indexes supplied     *     and the default values for the row...     */    if (mteOwner)        memcpy(entry->mteOwner, mteOwner, mteOwner_len);    netsnmp_table_row_add_index(row, ASN_OCTET_STR,                                entry->mteOwner, mteOwner_len);    if (mteEName)        memcpy(entry->mteEName, mteEName, mteEName_len);    netsnmp_table_row_add_index(row, ASN_PRIV_IMPLIED_OCTET_STR,                                entry->mteEName, mteEName_len);    entry->mteNotification_len = 2;  /* .0.0 */    if (fixed)        entry->flags |= MTE_EVENT_FLAG_FIXED;    /*     * ... and insert the row into the (common) table container     */    netsnmp_tdata_add_row(event_table_data, row);    DEBUGMSGTL(("disman:event:table", "Event entry created\n"));    return row;}/* * Remove a row from the event table  */voidmteEvent_removeEntry(netsnmp_tdata_row *row){    struct mteEvent *entry;    if (!row)        return;                 /* Nothing to remove */    entry = (struct mteEvent *)        netsnmp_tdata_remove_and_delete_row(event_table_data, row);    if (entry)        SNMP_FREE(entry);}    /* ===================================================     *     * APIs for processing the firing of an event     *     * =================================================== */int_mteEvent_fire_notify( struct mteEvent    *event,                       struct mteTrigger  *trigger,                       oid *suffix, size_t sfx_len );int_mteEvent_fire_set(    struct mteEvent    *event,                       struct mteTrigger  *trigger,                       oid *suffix, size_t sfx_len );intmteEvent_fire( char *owner, char *event,      /* Event to invoke    */               struct mteTrigger *trigger,    /* Trigger that fired */               oid  *suffix, size_t s_len )   /* Matching instance  */{    struct mteEvent *entry;    int fired = 0;    netsnmp_variable_list owner_var, event_var;    DEBUGMSGTL(("disman:event:fire", "Event fired (%s, %s)\n",                                      owner, event));    /*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -