icmp.c

来自「snmp的源代码,已经在我的ubuntu下编译通过」· C语言 代码 · 共 753 行 · 第 1/2 页

C
753
字号
    case ICMPOUTDESTUNREACHS:    case ICMPOUTTIMEEXCDS:    case ICMPOUTPARMPROBS:    case ICMPOUTSRCQUENCHS:    case ICMPOUTREDIRECTS:    case ICMPOUTECHOS:    case ICMPOUTECHOREPS:    case ICMPOUTTIMESTAMPS:    case ICMPOUTTIMESTAMPREPS:    case ICMPOUTADDRMASKS:    case ICMPOUTADDRMASKREPS:	/*	 * This is a bit of a hack, to shoehorn the HP-UX 11	 * single-object retrieval approach into the caching	 * architecture.	 */	if (icmp_load(NULL, (void*)subid) == -1 ) {            netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);            continue;	}        ret_value = icmpstat;        break;#else                          /* hpux11 */#ifdef WIN32    case ICMPINMSGS:        ret_value = icmpstat.stats.icmpInStats.dwMsgs;        break;    case ICMPINERRORS:        ret_value = icmpstat.stats.icmpInStats.dwErrors;        break;    case ICMPINDESTUNREACHS:        ret_value = icmpstat.stats.icmpInStats.dwDestUnreachs;        break;    case ICMPINTIMEEXCDS:        ret_value = icmpstat.stats.icmpInStats.dwTimeExcds;        break;    case ICMPINPARMPROBS:        ret_value = icmpstat.stats.icmpInStats.dwParmProbs;        break;    case ICMPINSRCQUENCHS:        ret_value = icmpstat.stats.icmpInStats.dwSrcQuenchs;        break;    case ICMPINREDIRECTS:        ret_value = icmpstat.stats.icmpInStats.dwRedirects;        break;    case ICMPINECHOS:        ret_value = icmpstat.stats.icmpInStats.dwEchos;        break;    case ICMPINECHOREPS:        ret_value = icmpstat.stats.icmpInStats.dwEchoReps;        break;    case ICMPINTIMESTAMPS:        ret_value = icmpstat.stats.icmpInStats.dwTimestamps;        break;    case ICMPINTIMESTAMPREPS:        ret_value = icmpstat.stats.icmpInStats.dwTimestampReps;        break;    case ICMPINADDRMASKS:        ret_value = icmpstat.stats.icmpInStats.dwAddrMasks;        break;    case ICMPINADDRMASKREPS:        ret_value = icmpstat.stats.icmpInStats.dwAddrMaskReps;        break;    case ICMPOUTMSGS:        ret_value = icmpstat.stats.icmpOutStats.dwMsgs;        break;    case ICMPOUTERRORS:        ret_value = icmpstat.stats.icmpOutStats.dwErrors;        break;    case ICMPOUTDESTUNREACHS:        ret_value = icmpstat.stats.icmpOutStats.dwDestUnreachs;        break;    case ICMPOUTTIMEEXCDS:        ret_value = icmpstat.stats.icmpOutStats.dwTimeExcds;        break;    case ICMPOUTPARMPROBS:        ret_value = icmpstat.stats.icmpOutStats.dwParmProbs;        break;    case ICMPOUTSRCQUENCHS:        ret_value = icmpstat.stats.icmpOutStats.dwSrcQuenchs;        break;    case ICMPOUTREDIRECTS:        ret_value = icmpstat.stats.icmpOutStats.dwRedirects;        break;    case ICMPOUTECHOS:        ret_value = icmpstat.stats.icmpOutStats.dwEchos;        break;    case ICMPOUTECHOREPS:        ret_value = icmpstat.stats.icmpOutStats.dwEchoReps;        break;    case ICMPOUTTIMESTAMPS:        ret_value = icmpstat.stats.icmpOutStats.dwTimestamps;        break;    case ICMPOUTTIMESTAMPREPS:        ret_value = icmpstat.stats.icmpOutStats.dwTimestampReps;        break;    case ICMPOUTADDRMASKS:        ret_value = icmpstat.stats.icmpOutStats.dwAddrMasks;        break;    case ICMPOUTADDRMASKREPS:        ret_value = icmpstat.stats.icmpOutStats.dwAddrMaskReps;        break;#endif                          /* WIN32 */#endif                          /* hpux11 */#endif                          /* USES_TRADITIONAL_ICMPSTAT */#endif                          /* USES_SNMP_DESIGNED_ICMPSTAT */	    }	    snmp_set_var_typed_value(request->requestvb, ASN_COUNTER,			             (u_char *)&ret_value, sizeof(ret_value));	}        break;    case MODE_GETNEXT:    case MODE_GETBULK:    case MODE_SET_RESERVE1:    case MODE_SET_RESERVE2:    case MODE_SET_ACTION:    case MODE_SET_COMMIT:    case MODE_SET_FREE:    case MODE_SET_UNDO:        snmp_log(LOG_WARNING, "mibII/icmp: Unsupported mode (%d)\n",                               reqinfo->mode);        break;    default:        snmp_log(LOG_WARNING, "mibII/icmp: Unrecognised mode (%d)\n",                               reqinfo->mode);        break;    }    return SNMP_ERR_NOERROR;}        /*********************	 *	 *  Internal implementation functions	 *	 *********************/#ifdef hpux11inticmp_load(netsnmp_cache *cache, void *vmagic){    int             fd;    struct nmparms  p;    unsigned int    ulen;    int             ret;    int             magic = (int) vmagic;    if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) < 0) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP object %d (hpux11)\n", magic));        return (-1);            /* error */    }    switch (magic) {    case ICMPINMSGS:        p.objid = ID_icmpInMsgs;        break;    case ICMPINERRORS:        p.objid = ID_icmpInErrors;        break;    case ICMPINDESTUNREACHS:        p.objid = ID_icmpInDestUnreachs;        break;    case ICMPINTIMEEXCDS:        p.objid = ID_icmpInTimeExcds;        break;    case ICMPINPARMPROBS:        p.objid = ID_icmpInParmProbs;        break;    case ICMPINSRCQUENCHS:        p.objid = ID_icmpInSrcQuenchs;        break;    case ICMPINREDIRECTS:        p.objid = ID_icmpInRedirects;        break;    case ICMPINECHOS:        p.objid = ID_icmpInEchos;        break;    case ICMPINECHOREPS:        p.objid = ID_icmpInEchoReps;        break;    case ICMPINTIMESTAMPS:        p.objid = ID_icmpInTimestamps;        break;    case ICMPINTIMESTAMPREPS:        p.objid = ID_icmpInTimestampReps;        break;    case ICMPINADDRMASKS:        p.objid = ID_icmpInAddrMasks;        break;    case ICMPINADDRMASKREPS:        p.objid = ID_icmpInAddrMaskReps;        break;    case ICMPOUTMSGS:        p.objid = ID_icmpOutMsgs;        break;    case ICMPOUTERRORS:        p.objid = ID_icmpOutErrors;        break;    case ICMPOUTDESTUNREACHS:        p.objid = ID_icmpOutDestUnreachs;        break;    case ICMPOUTTIMEEXCDS:        p.objid = ID_icmpOutTimeExcds;        break;    case ICMPOUTPARMPROBS:        p.objid = ID_icmpOutParmProbs;        break;    case ICMPOUTSRCQUENCHS:        p.objid = ID_icmpOutSrcQuenchs;        break;    case ICMPOUTREDIRECTS:        p.objid = ID_icmpOutRedirects;        break;    case ICMPOUTECHOS:        p.objid = ID_icmpOutEchos;        break;    case ICMPOUTECHOREPS:        p.objid = ID_icmpOutEchoReps;        break;    case ICMPOUTTIMESTAMPS:        p.objid = ID_icmpOutTimestamps;        break;    case ICMPOUTTIMESTAMPREPS:        p.objid = ID_icmpOutTimestampReps;        break;    case ICMPOUTADDRMASKS:        p.objid = ID_icmpOutAddrMasks;        break;    case ICMPOUTADDRMASKREPS:        p.objid = ID_icmpOutAddrMaskReps;        break;    default:        icmpstat = 0;        close_mib(fd);        return (0);    }    p.buffer = (void *)&icmpstat;    ulen = sizeof(ICMP_STAT_STRUCTURE);    p.len = &ulen;    ret = get_mib_info(fd, &p);    close_mib(fd);    DEBUGMSGTL(("mibII/icmp", "%s ICMP object %d (hpux11)\n",               (ret < 0 ? "Failed to load" : "Loaded"),  magic));    return (ret);               /* 0: ok, < 0: error */}#else                           /* hpux11 */#ifdef linuxinticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    ret_value = linux_read_icmp_stat(&icmpstat);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (linux)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (linux)\n"));    }    return ret_value;}#else		/* linux */#ifdef solaris2inticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    ret_value =        getMibstat(MIB_ICMP, &icmpstat, sizeof(mib2_icmp_t), GET_FIRST,                   &Get_everything, NULL);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (solaris)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (solaris)\n"));    }    return ret_value;}#else		/* solaris2 */#ifdef WIN32inticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    ret_value = GetIcmpStatistics(&icmpstat);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (win32)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (win32)\n"));    }    return ret_value;}#else		/* WIN32 */#if (defined(CAN_USE_SYSCTL) && defined(ICMPCTL_STATS))inticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    static int      sname[4] =        { CTL_NET, PF_INET, IPPROTO_ICMP, ICMPCTL_STATS };    size_t          len = sizeof(icmpstat);    ret_value = sysctl(sname, 4, &icmpstat, &len, 0, 0);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (sysctl)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (sysctl)\n"));    }    return ret_value;}#else		/* CAN_USE_SYSCTL && ICMPCTL_STATS */#ifdef HAVE_SYS_TCPIPSTATS_Hinticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    ret_value =        sysmp(MP_SAGET, MPSA_TCPIPSTATS, &icmpstat, sizeof icmpstat);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (tcpipstats)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (tcpipstats)\n"));    }    return ret_value;}#else		/* HAVE_SYS_TCPIPSTATS_H */#ifdef ICMPSTAT_SYMBOLinticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    if (auto_nlist(ICMPSTAT_SYMBOL, (char *)&icmpstat, sizeof(icmpstat)))        ret_value = 0;    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (icmpstat)\n"));    } else {        DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (icmpstat)\n"));    }    return ret_value;}#else		/* ICMPSTAT_SYMBOL */inticmp_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = -1;    DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (null)\n"));    return ret_value;}#endif		/* ICMPSTAT_SYMBOL */#endif		/* HAVE_SYS_TCPIPSTATS_H */#endif		/* CAN_USE_SYSCTL && ICMPCTL_STATS */#endif		/* WIN32 */#endif		/* solaris2 */#endif		/* linux */#endif		/* hpux11 */voidicmp_free(netsnmp_cache *cache, void *magic){    memset(&icmpstat, 0, sizeof(icmpstat));}

⌨️ 快捷键说明

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