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

📄 pingctltable.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 5 页
字号:
    case COLUMN_PINGCTLTYPE:        *write_method = write_pingCtlType;        *var_len = (StorageTmp->pingCtlTypeLen) * sizeof(oid);        return (u_char *) StorageTmp->pingCtlType;    case COLUMN_PINGCTLDESCR:        *write_method = write_pingCtlDescr;        *var_len = (StorageTmp->pingCtlDescrLen);        return (u_char *) StorageTmp->pingCtlDescr;    case COLUMN_PINGCTLSOURCEADDRESSTYPE:        *write_method = write_pingCtlSourceAddressType;        *var_len = sizeof(StorageTmp->pingCtlSourceAddressType);        return (u_char *) & StorageTmp->pingCtlSourceAddressType;    case COLUMN_PINGCTLSOURCEADDRESS:        *write_method = write_pingCtlSourceAddress;        *var_len = (StorageTmp->pingCtlSourceAddressLen);        return (u_char *) StorageTmp->pingCtlSourceAddress;    case COLUMN_PINGCTLIFINDEX:        *write_method = write_pingCtlIfIndex;        *var_len = sizeof(StorageTmp->pingCtlIfIndex);        return (u_char *) & StorageTmp->pingCtlIfIndex;    case COLUMN_PINGCTLBYPASSROUTETABLE:        *write_method = write_pingCtlByPassRouteTable;        *var_len = sizeof(StorageTmp->pingCtlByPassRouteTable);        return (u_char *) & StorageTmp->pingCtlByPassRouteTable;    case COLUMN_PINGCTLDSFIELD:        *write_method = write_pingCtlDSField;        *var_len = sizeof(StorageTmp->pingCtlDSField);        return (u_char *) & StorageTmp->pingCtlDSField;    case COLUMN_PINGCTLROWSTATUS:        *write_method = write_pingCtlRowStatus;        *var_len = sizeof(StorageTmp->pingCtlRowStatus);        return (u_char *) & StorageTmp->pingCtlRowStatus;    default:        ERROR_MSG("");    }    return NULL;}unsigned longpingProbeHistoryTable_count(struct pingCtlTable_data *thedata){    struct header_complex_index *hciptr2 = NULL;    netsnmp_variable_list *vars = NULL;    oid             newoid[MAX_OID_LEN];    size_t          newoid_len;    unsigned long   count = 0;    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen);       /* pingCtlOwnerIndex */    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen);   /* pingCtlOperationName */    header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);    for (hciptr2 = pingProbeHistoryTableStorage; hciptr2 != NULL;         hciptr2 = hciptr2->next) {        if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)            == 0) {            count = count + 1;        }    }    return count;}intpingProbeHistoryTable_delLast(struct pingCtlTable_data *thedata){    struct header_complex_index *hciptr2 = NULL;    struct header_complex_index *hcilast = NULL;    struct pingProbeHistoryTable_data *StorageDel = NULL;    struct pingProbeHistoryTable_data *StorageTmp = NULL;    netsnmp_variable_list *vars = NULL;    oid             newoid[MAX_OID_LEN];    size_t          newoid_len;    time_t          last_time = 2147483647;    struct tm      *tp;    tp = (struct tm *) malloc(sizeof(struct tm));    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen);       /* pingCtlOwnerIndex */    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen);   /* pingCtlOperationName */    header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);    for (hcilast = hciptr2 = pingProbeHistoryTableStorage; hciptr2 != NULL;         hciptr2 = hciptr2->next) {        if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)            == 0) {            StorageTmp =                header_complex_get_from_oid(pingProbeHistoryTableStorage,                                            hciptr2->name,                                            hciptr2->namelen);            strptime(StorageTmp->pingProbeHistoryTime, "%c", tp);            if (last_time > timegm(tp)) {                last_time = timegm(tp);                hcilast = hciptr2;            }        }    }    StorageDel =        header_complex_extract_entry(&pingProbeHistoryTableStorage,                                     hcilast);    DEBUGMSGTL(("pingProbeHistoryTable",                "delete the last one success!\n"));    SNMP_FREE(tp);}char           *sock_ntop_host(const struct sockaddr *sa, socklen_t salen){    static char     str[128];   /* Unix domain is largest */    switch (sa->sa_family) {    case AF_INET:{            struct sockaddr_in *sin = (struct sockaddr_in *) sa;            if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) ==                NULL)                return (NULL);            return (str);        }#ifdef	IPV6    case AF_INET6:{            struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;            if (inet_ntop(AF_INET6, &sin6->sin6_addr, str, sizeof(str)) ==                NULL)                return (NULL);            return (str);        }#endif#ifdef	AF_UNIX    case AF_UNIX:{            struct sockaddr_un *unp = (struct sockaddr_un *) sa;            /*             * OK to have no pathname bound to the socket: happens on             * every connect() unless client calls bind() first.              */            if (unp->sun_path[0] == 0)                strcpy(str, "(no pathname bound)");            else                snprintf(str, sizeof(str), "%s", unp->sun_path);            return (str);        }#endif#ifdef	HAVE_SOCKADDR_DL_STRUCT    case AF_LINK:{            struct sockaddr_dl *sdl = (struct sockaddr_dl *) sa;            if (sdl->sdl_nlen > 0)                snprintf(str, sizeof(str), "%*s",                         sdl->sdl_nlen, &sdl->sdl_data[0]);            else                snprintf(str, sizeof(str), "AF_LINK, index=%d",                         sdl->sdl_index);            return (str);        }#endif    default:        snprintf(str, sizeof(str),                 "sock_ntop_host: unknown AF_xxx: %d, len %d",                 sa->sa_family, salen);        return (str);    }    return (NULL);}char           *Sock_ntop_host(const struct sockaddr *sa, socklen_t salen){    char           *ptr;    if ((ptr = sock_ntop_host(sa, salen)) == NULL)        printf("sock_ntop_host error"); /* inet_ntop() sets errno */    return (ptr);}unsigned shortin_cksum(unsigned short *addr, int len){    int             nleft = len;    int             sum = 0;    unsigned short *w = addr;    unsigned short  answer = 0;    /*     * Our algorithm is simple, using a 32 bit accumulator (sum), we add     * sequential 16 bit words to it, and at the end, fold back all the     * carry bits from the top 16 bits into the lower 16 bits.     */    while (nleft > 1) {        sum += *w++;        nleft -= 2;    }    /*     * 4mop up an odd byte, if necessary      */    if (nleft == 1) {        *(unsigned char *) (&answer) = *(unsigned char *) w;        sum += answer;    }    /*     * 4add back carry outs from top 16 bits to low 16 bits      */    sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */    sum += (sum >> 16);         /* add carry */    answer = ~sum;              /* truncate to 16 bits */    return (answer);}struct addrinfo *host_serv(const char *host, const char *serv, int family, int socktype){    int             n;    struct addrinfo hints, *res;    bzero(&hints, sizeof(struct addrinfo));    hints.ai_flags = AI_CANONNAME;      /* always return canonical name */    hints.ai_family = family;   /* AF_UNSPEC, AF_INET, AF_INET6, etc. */    hints.ai_socktype = socktype;       /* 0, SOCK_STREAM, SOCK_DGRAM, etc. */    if ((n = getaddrinfo(host, serv, &hints, &res)) != 0)        return (NULL);    return (res);               /* return pointer to first on linked list */}/* * end host_serv  *//* * There is no easy way to pass back the integer return code from * getaddrinfo() in the function above, short of adding another argument * that is a pointer, so the easiest way to provide the wrapper function * is just to duplicate the simple function as we do here. */struct addrinfo *Host_serv(const char *host, const char *serv, int family, int socktype){    int             n;    struct addrinfo hints, *res;    bzero(&hints, sizeof(struct addrinfo));    hints.ai_flags = AI_CANONNAME;      /* always return canonical name */    hints.ai_family = family;   /* 0, AF_INET, AF_INET6, etc. */    hints.ai_socktype = socktype;       /* 0, SOCK_STREAM, SOCK_DGRAM, etc. */    if ((n = getaddrinfo(host, serv, &hints, &res)) != 0)        printf("host_serv error for %s, %s: %s",               (host == NULL) ? "(no hostname)" : host,               (serv == NULL) ? "(no service name)" : serv,               gai_strerror(n));    return (res);               /* return pointer to first on linked list */}intreadable_timeo(int fd, int sec){    fd_set          rset;    struct timeval  tv;    FD_ZERO(&rset);    FD_SET(fd, &rset);    tv.tv_sec = sec;    tv.tv_usec = 0;    return (select(fd + 1, &rset, NULL, NULL, &tv));}/* * send trap  */intsend_ping_trap(struct pingCtlTable_data *item,               oid * trap_oid, size_t trap_oid_len){    static oid      objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };     /* snmpTrapIOD.0 */    struct pingResultsTable_data *StorageTmp = NULL;    netsnmp_variable_list *var_list = NULL, *vars = NULL;    oid             newoid[MAX_OID_LEN];    size_t          newoid_len;    oid             pingCtlTargetAddress[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 2, 1, 4 };    oid             pingResultsMinRtt[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 4 };    oid             pingResultsMaxRtt[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 5 };    oid             pingResultsAverageRtt[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 6 };    oid             pingResultsProbeResponses[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 7 };    oid             pingResultsSendProbes[] =        { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 8 };    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen);     /* pingCtlOwnerIndex */    snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlOperationName */    StorageTmp = SNMP_MALLOC_STRUCT(pingResultsTable_data);    if ((StorageTmp =         (struct pingResultsTable_data *)         header_complex_get(pingResultsTableStorage, vars)) == NULL)        return SNMP_ERR_NOSUCHNAME;    /*     * snmpTrap oid      */    snmp_varlist_add_variable(&var_list, objid_snmptrap,                              sizeof(objid_snmptrap) / sizeof(oid),                              ASN_OBJECT_ID, (u_char *) trap_oid,                              trap_oid_len * sizeof(oid));    /*     * pingCtlTargetAddress      */    bzero(newoid, MAX_OID_LEN * sizeof(oid));    header_complex_generate_oid(newoid, &newoid_len, pingCtlTargetAddress,                                sizeof(pingCtlTargetAddress) / sizeof(oid),                                vars);    snmp_varlist_add_variable(&var_list, newoid,                              newoid_len,                              ASN_OCTET_STR,                              (u_char *) item->pingCtlTargetAddress,                              item->pingCtlTargetAddressLen);    /*     * pingResultsMinRtt     */    bzero(newoid, newoid_len);    header_complex_generate_oid(newoid, &newoid_len, pingResultsMinRtt,                                sizeof(pingResultsMinRtt) / sizeof(oid),                                vars);    snmp_varlist_add_variable(&var_list, newoid,                              newoid_len,                              ASN_UNSIGNED,                              (u_char *) & (StorageTmp->pingResultsMinRtt),                              sizeof(StorageTmp->pingResultsMinRtt));    /*

⌨️ 快捷键说明

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