📄 statistics.c
字号:
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 + -