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

📄 history.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
        return;    }    if (RMON1_ENTRY_VALID != hdr_ptr->status) {        ag_trace("Err: history_get_backet when entry %d is not valid ?!!",                 (int) hdr_ptr->ctrl_index);        /*         * snmp_alarm_print_list ();          */        snmp_alarm_unregister(body->timer_id);        ag_trace("Err: unregistered %ld", (long) body->timer_id);        return;    }    SYSTEM_get_eth_statistics(&body->data_source, &newSample);    bptr = ROWDATAAPI_locate_new_data(&body->scrlr);    if (!bptr) {        ag_trace            ("Err: history_get_backet for %d: empty bucket's list !??\n",             (int) hdr_ptr->ctrl_index);        return;    }    bptr->data_index = ROWDATAAPI_get_total_number(&body->scrlr);    bptr->start_interval = body->previous_bucket.start_interval;    compute_delta(&bptr->EthData, &newSample,                  &body->previous_bucket.EthData);    bptr->utilization =        bptr->EthData.octets * 8 + bptr->EthData.packets * (96 + 64);    bptr->utilization /= body->coeff;    /*     * update previous_bucket      */    body->previous_bucket.start_interval = AGUTIL_sys_up_time();    memcpy(&body->previous_bucket.EthData, &newSample,           sizeof(ETH_STATS_T));}/* * Control Table RowApi Callbacks  */inthistory_Create(RMON_ENTRY_T * eptr){                               /* create the body: alloc it and set defaults */    CRTL_ENTRY_T   *body;    eptr->body = AGMALLOC(sizeof(CRTL_ENTRY_T));    if (!eptr->body)        return -3;    body = (CRTL_ENTRY_T *) eptr->body;    /*     * set defaults      */    body->interval = HIST_DEF_INTERVAL;    body->timer_id = 0;    memcpy(&body->data_source, &DEFAULT_DATA_SOURCE, sizeof(VAR_OID_T));    ROWDATAAPI_init(&body->scrlr, HIST_DEF_BUCK_REQ,                    MAX_BUCKETS_IN_CRTL_ENTRY, sizeof(DATA_ENTRY_T), NULL);    return 0;}inthistory_Validate(RMON_ENTRY_T * eptr){    /*     * T.B.D. (system dependent) check valid inteface in body->data_source;      */    return 0;}inthistory_Activate(RMON_ENTRY_T * eptr){    CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) eptr->body;    body->coeff = 100000L * (long) body->interval;    ROWDATAAPI_set_size(&body->scrlr,                        body->scrlr.data_requested,                        (u_char)(RMON1_ENTRY_VALID == eptr->status) );    SYSTEM_get_eth_statistics(&body->data_source,                              &body->previous_bucket.EthData);    body->previous_bucket.start_interval = AGUTIL_sys_up_time();    body->scrlr.current_data_ptr = body->scrlr.first_data_ptr;    /*     * ag_trace ("Dbg:   registered in history_Activate");      */    body->timer_id = snmp_alarm_register(body->interval, SA_REPEAT,                                         history_get_backet, eptr);    return 0;}inthistory_Deactivate(RMON_ENTRY_T * eptr){    CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) eptr->body;    snmp_alarm_unregister(body->timer_id);    /*     * ag_trace ("Dbg: unregistered in history_Deactivate timer_id=%d",     * (int) body->timer_id);      */    /*     * free data list      */    ROWDATAAPI_descructor(&body->scrlr);    return 0;}inthistory_Copy(RMON_ENTRY_T * eptr){    CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) eptr->body;    CRTL_ENTRY_T   *clone = (CRTL_ENTRY_T *) eptr->tmp;    if (body->scrlr.data_requested != clone->scrlr.data_requested) {        ROWDATAAPI_set_size(&body->scrlr, clone->scrlr.data_requested,                            (u_char)(RMON1_ENTRY_VALID == eptr->status) );    }    if (body->interval != clone->interval) {        if (RMON1_ENTRY_VALID == eptr->status) {            snmp_alarm_unregister(body->timer_id);            body->timer_id =                snmp_alarm_register(clone->interval, SA_REPEAT,                                    history_get_backet, eptr);        }        body->interval = clone->interval;    }    if (snmp_oid_compare        (clone->data_source.objid, clone->data_source.length,         body->data_source.objid, body->data_source.length)) {        memcpy(&body->data_source, &clone->data_source, sizeof(VAR_OID_T));    }    return 0;}static SCROLLER_T *history_extract_scroller(void *v_body){    CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) v_body;    return &body->scrlr;}/* * var_etherHistoryTable(): */unsigned char  *var_etherHistoryTable(struct variable *vp,                      oid * name,                      size_t * length,                      int exact,                      size_t * var_len, WriteMethod ** write_method){    static long     long_ret;    static DATA_ENTRY_T theBucket;    RMON_ENTRY_T   *hdr;    CRTL_ENTRY_T   *ctrl;    *write_method = NULL;    hdr = ROWDATAAPI_header_DataEntry(vp, name, length, exact, var_len,                                      table_ptr,                                      &history_extract_scroller,                                      sizeof(DATA_ENTRY_T), &theBucket);    if (!hdr)        return NULL;    *var_len = sizeof(long);    /* default */    ctrl = (CRTL_ENTRY_T *) hdr->body;    switch (vp->magic) {    case DATA_INDEX:        long_ret = hdr->ctrl_index;        return (unsigned char *) &long_ret;    case DATA_SAMPLEINDEX:        long_ret = theBucket.data_index;        return (unsigned char *) &long_ret;    case DATA_INTERVALSTART:        long_ret = 0;        return (unsigned char *) &theBucket.start_interval;    case DATA_DROPEVENTS:        long_ret = 0;        return (unsigned char *) &long_ret;    case DATA_OCTETS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.octets;    case DATA_PKTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.packets;    case DATA_BROADCASTPKTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.bcast_pkts;    case DATA_MULTICASTPKTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.mcast_pkts;    case DATA_CRCALIGNERRORS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.crc_align;    case DATA_UNDERSIZEPKTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.undersize;    case DATA_OVERSIZEPKTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.oversize;    case DATA_FRAGMENTS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.fragments;    case DATA_JABBERS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.jabbers;    case DATA_COLLISIONS:        long_ret = 0;        return (unsigned char *) &theBucket.EthData.collisions;    case DATA_UTILIZATION:        long_ret = 0;        return (unsigned char *) &theBucket.utilization;    default:        ag_trace("etherHistoryTable: unknown vp->magic=%d",                 (int) vp->magic);        ERROR_MSG("");    }    return NULL;}#if 1                           /* debug, but may be used for init. TBD: may be token snmpd.conf ? */intadd_hist_entry(int ctrl_index, int ifIndex,               u_long interval, u_long requested){    register RMON_ENTRY_T *eptr;    register CRTL_ENTRY_T *body;    int             ierr;    ierr = ROWAPI_new(table_ptr, ctrl_index);    if (ierr) {        ag_trace("ROWAPI_new failed with %d", ierr);        return ierr;    }    eptr = ROWAPI_find(table_ptr, ctrl_index);    if (!eptr) {        ag_trace("ROWAPI_find failed");        return -4;    }    body = (CRTL_ENTRY_T *) eptr->body;    /*     * set parameters      */    body->data_source.objid[body->data_source.length - 1] = ifIndex;    body->interval = interval;    body->scrlr.data_requested = requested;    eptr->new_status = RMON1_ENTRY_VALID;    ierr = ROWAPI_commit(table_ptr, ctrl_index);    if (ierr) {        ag_trace("ROWAPI_commit failed with %d", ierr);    }    return ierr;}#endif/* * Registration & Initializatio section  */oid             historyControlTable_variables_oid[] =    { 1, 3, 6, 1, 2, 1, 16, 2, 1 };struct variable2 historyControlTable_variables[] = {    /*     * magic number        , variable type, ro/rw , callback fn  ,           L, oidsuffix      */    {CTRL_INDEX, ASN_INTEGER, RONLY, var_historyControlTable, 2, {1, 1}},    {CTRL_DATASOURCE, ASN_OBJECT_ID, RWRITE, var_historyControlTable, 2,     {1, 2}},    {CTRL_BUCKETSREQUESTED, ASN_INTEGER, RWRITE, var_historyControlTable,     2, {1, 3}},    {CTRL_BUCKETSGRANTED, ASN_INTEGER, RONLY, var_historyControlTable, 2,     {1, 4}},    {CTRL_INTERVAL, ASN_INTEGER, RWRITE, var_historyControlTable, 2,     {1, 5}},    {CTRL_OWNER, ASN_OCTET_STR, RWRITE, var_historyControlTable, 2,     {1, 6}},    {CTRL_STATUS, ASN_INTEGER, RWRITE, var_historyControlTable, 2, {1, 7}},};oid             etherHistoryTable_variables_oid[] =    { 1, 3, 6, 1, 2, 1, 16, 2, 2 };struct variable2 etherHistoryTable_variables[] = {    /*     * magic number     , variable type , ro/rw , callback fn  ,        L, oidsuffix      */    {DATA_INDEX, ASN_INTEGER, RONLY, var_etherHistoryTable, 2, {1, 1}},    {DATA_SAMPLEINDEX, ASN_INTEGER, RONLY, var_etherHistoryTable, 2,     {1, 2}},    {DATA_INTERVALSTART, ASN_TIMETICKS, RONLY, var_etherHistoryTable, 2,     {1, 3}},    {DATA_DROPEVENTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 4}},    {DATA_OCTETS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 5}},    {DATA_PKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 6}},    {DATA_BROADCASTPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 7}},    {DATA_MULTICASTPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 8}},    {DATA_CRCALIGNERRORS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 9}},    {DATA_UNDERSIZEPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 10}},    {DATA_OVERSIZEPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 11}},    {DATA_FRAGMENTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 12}},    {DATA_JABBERS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 13}},    {DATA_COLLISIONS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,     {1, 14}},    {DATA_UTILIZATION, ASN_INTEGER, RONLY, var_etherHistoryTable, 2,     {1, 15}},};voidinit_history(void){    REGISTER_MIB("historyControlTable", historyControlTable_variables,                 variable2, historyControlTable_variables_oid);    REGISTER_MIB("etherHistoryTable", etherHistoryTable_variables,                 variable2, etherHistoryTable_variables_oid);    ROWAPI_init_table(&HistoryCtrlTable, "History", 0, &history_Create, NULL,   /* &history_Clone, */                      NULL,     /* &history_Delete, */                      &history_Validate,                      &history_Activate,                      &history_Deactivate, &history_Copy);    /*     * add_hist_entry (2, 3, 4, 2);      */}

⌨️ 快捷键说明

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