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

📄 statistics.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
            break;        case Leaf_etherStatsOwner:            if (hdr->new_owner)                AGFREE(hdr->new_owner);            hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);;            if (!hdr->new_owner)                return SNMP_ERR_TOOBIG;            snmp_status = AGUTIL_get_string_value(var_val, var_val_type,                                                  var_val_len,                                                  MAX_OWNERSTRING,                                                  1, NULL, hdr->new_owner);            if (SNMP_ERR_NOERROR != snmp_status) {                return snmp_status;            }            break;        case Leaf_etherStatsStatus:            snmp_status = AGUTIL_get_int_value(var_val, var_val_type,                                               var_val_len,                                               RMON1_ENTRY_VALID,                                               RMON1_ENTRY_INVALID,                                               &long_temp);            if (SNMP_ERR_NOERROR != snmp_status) {                ag_trace("cannot browse etherStatsStatus");                return snmp_status;            }            hdr->new_status = long_temp;            break;            break;        default:            ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name,                     (int) leaf_id);            return SNMP_ERR_NOSUCHNAME;        }                       /* of switch by 'leaf_id' */        break;    }                           /* of switch by 'action' */    prev_action = action;    return SNMP_ERR_NOERROR;}/*************************************************** * Function:var_etherStatsEntry  * Purpose: Handles the request for etherStatsEntry variable instances ***************************************************/u_char         *var_etherStatsEntry(struct variable * vp, oid * name, size_t * length,                    int exact, size_t * var_len,                    WriteMethod ** write_method){    static long     long_return;    static CRTL_ENTRY_T theEntry;    RMON_ENTRY_T   *hdr;    *write_method = write_etherStatsEntry;    hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,                                     table_ptr,                                     &theEntry, sizeof(CRTL_ENTRY_T));    if (!hdr)        return NULL;    if (RMON1_ENTRY_VALID == hdr->status)        SYSTEM_get_eth_statistics(&theEntry.data_source, &theEntry.eth);    *var_len = sizeof(long);    switch (vp->magic) {    case IDetherStatsIndex:        long_return = hdr->ctrl_index;        return (u_char *) & long_return;    case IDetherStatsDataSource:        *var_len = sizeof(oid) * theEntry.data_source.length;        return (unsigned char *) theEntry.data_source.objid;    case IDetherStatsDropEvents:        long_return = 0;        /* theEntry.eth.etherStatsDropEvents; */        return (u_char *) & long_return;    case IDetherStatsOctets:        long_return = theEntry.eth.octets;        return (u_char *) & long_return;    case IDetherStatsPkts:        long_return = theEntry.eth.packets;        return (u_char *) & long_return;    case IDetherStatsBroadcastPkts:        long_return = theEntry.eth.bcast_pkts;        return (u_char *) & long_return;    case IDetherStatsMulticastPkts:        long_return = theEntry.eth.mcast_pkts;        return (u_char *) & long_return;    case IDetherStatsCRCAlignErrors:        long_return = theEntry.eth.crc_align;        return (u_char *) & long_return;    case IDetherStatsUndersizePkts:        long_return = theEntry.eth.undersize;        return (u_char *) & long_return;    case IDetherStatsOversizePkts:        long_return = theEntry.eth.oversize;        return (u_char *) & long_return;    case IDetherStatsFragments:        long_return = theEntry.eth.fragments;        return (u_char *) & long_return;    case IDetherStatsJabbers:        long_return = theEntry.eth.jabbers;        return (u_char *) & long_return;    case IDetherStatsCollisions:        long_return = theEntry.eth.collisions;        return (u_char *) & long_return;    case IDetherStatsPkts64Octets:        long_return = theEntry.eth.pkts_64;        return (u_char *) & long_return;    case IDetherStatsPkts65to127Octets:        long_return = theEntry.eth.pkts_65_127;        return (u_char *) & long_return;    case IDetherStatsPkts128to255Octets:        long_return = theEntry.eth.pkts_128_255;        return (u_char *) & long_return;    case IDetherStatsPkts256to511Octets:        long_return = theEntry.eth.pkts_256_511;        return (u_char *) & long_return;    case IDetherStatsPkts512to1023Octets:        long_return = theEntry.eth.pkts_512_1023;        return (u_char *) & long_return;    case IDetherStatsPkts1024to1518Octets:        long_return = theEntry.eth.pkts_1024_1518;        return (u_char *) & long_return;    case IDetherStatsOwner:        if (hdr->owner) {            *var_len = strlen(hdr->owner);            return (unsigned char *) hdr->owner;        } else {            *var_len = 0;            return (unsigned char *) "";        }    case IDetherStatsStatus:        long_return = hdr->status;        return (u_char *) & long_return;    default:        ERROR_MSG("");    };                          /* of switch by 'vp->magic'  */    return NULL;}#if 1                           /* debug, but may be used for init. TBD: may be token snmpd.conf ? */intadd_statistics_entry(int ctrl_index, int ifIndex){    int             ierr;    ierr = ROWAPI_new(table_ptr, ctrl_index);    switch (ierr) {    case -1:        ag_trace("max. number exedes\n");        break;    case -2:        ag_trace("malloc failed");        break;    case -3:        ag_trace("ClbkCreate failed");        break;    case 0:        break;    default:        ag_trace("Unknown code %d", ierr);        break;    }    if (!ierr) {        register RMON_ENTRY_T *eptr = ROWAPI_find(table_ptr, ctrl_index);        if (!eptr) {            ag_trace("cannot find it");            ierr = -4;        } else {            CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) eptr->body;            body->data_source.objid[body->data_source.length - 1] =                ifIndex;            eptr->new_status = RMON1_ENTRY_VALID;            ierr = ROWAPI_commit(table_ptr, ctrl_index);            if (ierr) {                ag_trace("ROWAPI_commit returned %d", ierr);            }        }    }    return ierr;}#endif/*************************************************** * define Variables callbacks  ***************************************************/oid             oidstatisticsVariablesOid[] = { 1, 3, 6, 1, 2, 1, 16, 1 };struct variable7 oidstatisticsVariables[] = {    {IDetherStatsIndex, ASN_INTEGER, RONLY, var_etherStatsEntry, 3,     {1, 1, 1}},    {IDetherStatsDataSource, ASN_OBJECT_ID, RWRITE, var_etherStatsEntry, 3,     {1, 1, 2}},    {IDetherStatsDropEvents, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 3}},    {IDetherStatsOctets, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 4}},    {IDetherStatsPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 5}},    {IDetherStatsBroadcastPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 6}},    {IDetherStatsMulticastPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 7}},    {IDetherStatsCRCAlignErrors, ASN_COUNTER, RONLY, var_etherStatsEntry,     3, {1, 1, 8}},    {IDetherStatsUndersizePkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 9}},    {IDetherStatsOversizePkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 10}},    {IDetherStatsFragments, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 11}},    {IDetherStatsJabbers, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 12}},    {IDetherStatsCollisions, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 13}},    {IDetherStatsPkts64Octets, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,     {1, 1, 14}},    {IDetherStatsPkts65to127Octets, ASN_COUNTER, RONLY,     var_etherStatsEntry, 3, {1, 1, 15}},    {IDetherStatsPkts128to255Octets, ASN_COUNTER, RONLY,     var_etherStatsEntry, 3, {1, 1, 16}},    {IDetherStatsPkts256to511Octets, ASN_COUNTER, RONLY,     var_etherStatsEntry, 3, {1, 1, 17}},    {IDetherStatsPkts512to1023Octets, ASN_COUNTER, RONLY,     var_etherStatsEntry, 3, {1, 1, 18}},    {IDetherStatsPkts1024to1518Octets, ASN_COUNTER, RONLY,     var_etherStatsEntry, 3, {1, 1, 19}},    {IDetherStatsOwner, ASN_OCTET_STR, RWRITE, var_etherStatsEntry, 3,     {1, 1, 20}},    {IDetherStatsStatus, ASN_INTEGER, RWRITE, var_etherStatsEntry, 3,     {1, 1, 21}},    {IDetherStatsDroppedFrames, ASN_COUNTER, RONLY, var_etherStats2Entry,     3, {4, 1, 1}},    {IDetherStatsCreateTime, ASN_TIMETICKS, RONLY, var_etherStats2Entry, 3,     {4, 1, 2}},};/*************************************************** * Function:init_statistics  * Purpose: register statistics objects in the agent  ***************************************************/voidinit_statistics(void){    REGISTER_MIB(MIB_DESCR, oidstatisticsVariables, variable7,                 oidstatisticsVariablesOid);    ROWAPI_init_table(&StatCtrlTable, MIB_DESCR, 0, &stat_Create, NULL, /* &stat_Clone, */                      NULL,     /* &stat_Delete, */                      &stat_Validate,                      &stat_Activate, &stat_Deactivate, &stat_Copy);#if 0                           /* debug */    {        int             iii;        for (iii = 1; iii < 6; iii++) {            add_statistics_entry(iii, iii);        }        add_statistics_entry(10, 16);        add_statistics_entry(12, 11);    }#endif}/* * end of file statistics.c  */

⌨️ 快捷键说明

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