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

📄 traceroutectltable.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 5 页
字号:
/* *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches. * *All right reserved * *File Name:traceRouteCtlTable.c *File Description:Rows of traceRouteCtlTable MIB add delete ans read. *              Rows of traceRouteResultsTable MIB add and delete. *              Rows of traceRouteProbeHistoryTable MIB add and delete. *              Rows of traceRouteHopsTable MIB add and delete. *              The main function is also here. * *Current Version:1.0 *Author:ChenJing *Date:2004.8.20 */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <pthread.h>#include "traceRouteCtlTable.h"#include "traceRouteResultsTable.h"#include "traceRouteProbeHistoryTable.h"#include "traceRouteHopsTable.h"#include "header_complex.h"oid             traceRouteCtlTable_variables_oid[] =    { 1, 3, 6, 1, 2, 1, 81, 1, 2 };/* trap */oid             traceRoutePathChange[] = { 1, 3, 6, 1, 2, 1, 81, 0, 1 };oid             traceRouteTestFailed[] = { 1, 3, 6, 1, 2, 1, 81, 0, 2 };oid             traceRouteTestCompleted[] = { 1, 3, 6, 1, 2, 1, 81, 0, 3 };struct variable2 traceRouteCtlTable_variables[] = {    /*     * magic number        , variable type , ro/rw , callback fn  , L, oidsuffix      */    {COLUMN_TRACEROUTECTLTARGETADDRESSTYPE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 3}},    {COLUMN_TRACEROUTECTLTARGETADDRESS,   ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 4}},    {COLUMN_TRACEROUTECTLBYPASSROUTETABLE,  ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 5}},    {COLUMN_TRACEROUTECTLDATASIZE,     ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 6}},    {COLUMN_TRACEROUTECTLTIMEOUT,      ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 7}},    {COLUMN_TRACEROUTECTLPROBESPERHOP, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 8}},    {COLUMN_TRACEROUTECTLPORT,         ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 9}},    {COLUMN_TRACEROUTECTLMAXTTL,       ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 10}},    {COLUMN_TRACEROUTECTLDSFIELD,      ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 11}},    {COLUMN_TRACEROUTECTLSOURCEADDRESSTYPE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 12}},    {COLUMN_TRACEROUTECTLSOURCEADDRESS,   ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 13}},    {COLUMN_TRACEROUTECTLIFINDEX,       ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 14}},    {COLUMN_TRACEROUTECTLMISCOPTIONS, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 15}},    {COLUMN_TRACEROUTECTLMAXFAILURES,  ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 16}},    {COLUMN_TRACEROUTECTLDONTFRAGMENT,  ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 17}},    {COLUMN_TRACEROUTECTLINITIALTTL,   ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 18}},    {COLUMN_TRACEROUTECTLFREQUENCY,    ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 19}},    {COLUMN_TRACEROUTECTLSTORAGETYPE,   ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 20}},    {COLUMN_TRACEROUTECTLADMINSTATUS,   ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 21}},    {COLUMN_TRACEROUTECTLDESCR,       ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 22}},    {COLUMN_TRACEROUTECTLMAXROWS,      ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 23}},    {COLUMN_TRACEROUTECTLTRAPGENERATION,  ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 24}},    {COLUMN_TRACEROUTECTLCREATEHOPSENTRIES, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 25}},    {COLUMN_TRACEROUTECTLTYPE,        ASN_OBJECT_ID, RWRITE, var_traceRouteCtlTable, 2, {1, 26}},    {COLUMN_TRACEROUTECTLROWSTATUS,     ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 27}}};/* * global storage of our data, saved in and configured by header_complex()  */struct header_complex_index *traceRouteCtlTableStorage = NULL;struct header_complex_index *traceRouteResultsTableStorage = NULL;struct header_complex_index *traceRouteProbeHistoryTableStorage = NULL;struct header_complex_index *traceRouteHopsTableStorage = NULL;voidinit_traceRouteCtlTable(void){    DEBUGMSGTL(("traceRouteCtlTable", "initializing...  "));    /*     * register ourselves with the agent to handle our mib tree      */    REGISTER_MIB("traceRouteCtlTable", traceRouteCtlTable_variables,                 variable2, traceRouteCtlTable_variables_oid);    /*     * register our config handler(s) to deal with registrations      */    snmpd_register_config_handler("traceRouteCtlTable",                                  parse_traceRouteCtlTable, NULL, NULL);    /*     * we need to be called back later to store our data      */    snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,                           store_traceRouteCtlTable, NULL);    DEBUGMSGTL(("traceRouteCtlTable", "done.\n"));}voidinit_trResultsTable(struct traceRouteCtlTable_data *item){    struct traceRouteResultsTable_data *StorageTmp = NULL;    netsnmp_variable_list *vars = NULL;    char           *host = NULL;    host =        (char *) malloc(sizeof(char) *                        (item->traceRouteCtlTargetAddressLen + 1));    if (host == NULL) {        DEBUGMSGTL(("traceRouteCtlTable", "host calloc %s\n",                    strerror(errno)));        exit(1);    }    bzero(host, sizeof(char) * (item->traceRouteCtlTargetAddressLen + 1));    strcpy(host, item->traceRouteCtlTargetAddress);    host[item->traceRouteCtlTargetAddressLen] = '\0';    StorageTmp = SNMP_MALLOC_STRUCT(traceRouteResultsTable_data);    if (StorageTmp == NULL) {        DEBUGMSGTL(("traceRouteCtlTable", "StorageTmp malloc %s\n",                    strerror(errno)));        exit(1);    }    StorageTmp->traceRouteCtlOwnerIndex =        (char *) malloc(sizeof(char) *                        (item->traceRouteCtlOwnerIndexLen + 1));    if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {        DEBUGMSGTL(("traceRouteCtlTable",                    "traceRouteCtlOwnerIndex malloc %s\n",                    strerror(errno)));        exit(1);    }    memcpy(StorageTmp->traceRouteCtlOwnerIndex,           item->traceRouteCtlOwnerIndex,           item->traceRouteCtlOwnerIndexLen + 1);    StorageTmp->traceRouteCtlOwnerIndex[item->traceRouteCtlOwnerIndexLen] =        '\0';    StorageTmp->traceRouteCtlOwnerIndexLen =        item->traceRouteCtlOwnerIndexLen;    StorageTmp->traceRouteCtlTestName =        (char *) malloc(sizeof(char) *                        (item->traceRouteCtlTestNameLen + 1));    if (StorageTmp->traceRouteCtlTestName == NULL) {        DEBUGMSGTL(("traceRouteCtlTable",                    "traceRouteCtlTestName malloc %s\n", strerror(errno)));        exit(1);    }    memcpy(StorageTmp->traceRouteCtlTestName, item->traceRouteCtlTestName,           item->traceRouteCtlTestNameLen + 1);    StorageTmp->traceRouteCtlTestName[item->traceRouteCtlTestNameLen] =        '\0';    StorageTmp->traceRouteCtlTestNameLen = item->traceRouteCtlTestNameLen;    StorageTmp->traceRouteResultsOperStatus = 1;    if (item->traceRouteCtlTargetAddressType == 1        || item->traceRouteCtlTargetAddressType == 16) {        struct sockaddr whereto;        /* Who to try to reach */        register struct sockaddr_in *to = (struct sockaddr_in *) &whereto;        register struct hostinfo *hi = NULL;        hi = gethostinfo(host);        if (hi == NULL) {            DEBUGMSGTL(("traceRouteCtlTable", "hi calloc %s\n",                        strerror(errno)));            exit(1);        }        setsin(to, hi->addrs[0]);        if (inet_ntoa(to->sin_addr) == NULL) {            StorageTmp->traceRouteResultsIpTgtAddrType = 0;            StorageTmp->traceRouteResultsIpTgtAddr = strdup("");            StorageTmp->traceRouteResultsIpTgtAddrLen = 0;        } else {            StorageTmp->traceRouteResultsIpTgtAddrType = 1;            StorageTmp->traceRouteResultsIpTgtAddr =                (char *) malloc(sizeof(char) *                                (strlen(inet_ntoa(to->sin_addr)) + 1));            if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {                DEBUGMSGTL(("traceRouteCtlTable",                            "traceRouteResultsIpTgtAddr malloc %s\n",                            strerror(errno)));                exit(1);            }            memcpy(StorageTmp->traceRouteResultsIpTgtAddr,                   inet_ntoa(to->sin_addr),                   strlen(inet_ntoa(to->sin_addr)) + 1);            StorageTmp->                traceRouteResultsIpTgtAddr[strlen(inet_ntoa(to->sin_addr))]                = '\0';            StorageTmp->traceRouteResultsIpTgtAddrLen =                strlen(inet_ntoa(to->sin_addr));        }    }    if (item->traceRouteCtlTargetAddressType == 2) {        struct sockaddr_in6 whereto;    /* Who to try to reach */        register struct sockaddr_in6 *to =            (struct sockaddr_in6 *) &whereto;        struct hostent *hp = NULL;        /* struct hostenv hp; */        char            pa[64];        bzero(pa, 64);        to->sin6_family = AF_INET6;        to->sin6_port = htons(33434);        if (inet_pton(AF_INET6, host, &to->sin6_addr) > 0) {            StorageTmp->traceRouteResultsIpTgtAddrType = 2;            StorageTmp->traceRouteResultsIpTgtAddr =                (char *) malloc(sizeof(char) * (strlen(host) + 1));            if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {                DEBUGMSGTL(("traceRouteCtlTable",                            "traceRouteResultsIpTgtAddr malloc %s\n",                            strerror(errno)));                exit(1);            }            bzero(StorageTmp->traceRouteResultsIpTgtAddr,                  sizeof(char) * (strlen(host) + 1));            memcpy(StorageTmp->traceRouteResultsIpTgtAddr, host,                   strlen(host) + 1);            StorageTmp->traceRouteResultsIpTgtAddr[strlen(host)] = '\0';            StorageTmp->traceRouteResultsIpTgtAddrLen = strlen(host);        } else {            hp = gethostbyname2(host, AF_INET6);            if (hp != NULL) {                const char     *hostname;                memmove((caddr_t) & to->sin6_addr, hp->h_addr, 16);                hostname = inet_ntop(AF_INET6, &to->sin6_addr, pa, 64);                StorageTmp->traceRouteResultsIpTgtAddrType = 2;                StorageTmp->traceRouteResultsIpTgtAddr =                    (char *) malloc(sizeof(char) * (strlen(hostname) + 1));                if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {                    DEBUGMSGTL(("traceRouteCtlTable",                                "traceRouteResultsIpTgtAddr malloc %s\n",                                strerror(errno)));                    exit(1);                }                bzero(StorageTmp->traceRouteResultsIpTgtAddr,                      sizeof(char) * (strlen(host) + 1));                memcpy(StorageTmp->traceRouteResultsIpTgtAddr, hostname,                       strlen(hostname) + 1);                StorageTmp->traceRouteResultsIpTgtAddr[strlen(hostname)] =                    '\0';                StorageTmp->traceRouteResultsIpTgtAddrLen =                    strlen(hostname);            } else {                DEBUGMSGTL(("traceRouteCtlTable",                            "traceroute: unknown host %s\n", host));                StorageTmp->traceRouteResultsIpTgtAddrType = 0;                StorageTmp->traceRouteResultsIpTgtAddr = strdup("");                StorageTmp->traceRouteResultsIpTgtAddrLen = 0;            }        }    }    StorageTmp->traceRouteResultsCurHopCount = 0;    StorageTmp->traceRouteResultsCurProbeCount = 0;    StorageTmp->traceRouteResultsTestAttempts = 0;    StorageTmp->traceRouteResultsTestSuccesses = 0;    StorageTmp->traceRouteResultsLastGoodPath = strdup("");    StorageTmp->traceRouteResultsLastGoodPathLen = 0;    item->traceRouteResults = StorageTmp;    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /*  traceRouteCtlOwnerIndex  */    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen);     /*  traceRouteCtlTestName  */    if ((header_complex_get(traceRouteResultsTableStorage, vars)) != NULL) {        traceRouteResultsTable_del(item);    }    snmp_free_varbind(vars);    vars = NULL;    if (item->traceRouteResults != NULL) {        if (traceRouteResultsTable_add(item) != SNMPERR_SUCCESS) {            DEBUGMSGTL(("traceRouteResultsTable",                        "init an entry error\n"));        }    }}intmodify_trResultsOper(struct traceRouteCtlTable_data *thedata, long val){    netsnmp_variable_list *vars = NULL;    struct traceRouteResultsTable_data *StorageTmp = NULL;    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen);   /* traceRouteCtlOwnerIndex */    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen);       /* traceRouteCtlTestName */    if ((StorageTmp =         header_complex_get(traceRouteResultsTableStorage,                            vars)) == NULL) {        snmp_free_varbind(vars);        vars = NULL;        return SNMP_ERR_NOSUCHNAME;    } else {        StorageTmp->traceRouteResultsOperStatus = val;        DEBUGMSGTL(("traceRouteResultsOperStatus", "done.\n"));        snmp_free_varbind(vars);        vars = NULL;        return SNMPERR_SUCCESS;    }}struct traceRouteCtlTable_data *create_traceRouteCtlTable_data(void){    struct traceRouteCtlTable_data *StorageNew = NULL;    StorageNew = SNMP_MALLOC_STRUCT(traceRouteCtlTable_data);    if (StorageNew == NULL) {        exit(1);    }    StorageNew->traceRouteCtlTargetAddressType = 1;    StorageNew->traceRouteCtlTargetAddress = strdup("");    StorageNew->traceRouteCtlTargetAddressLen = 0;

⌨️ 快捷键说明

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