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

📄 ip.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
    case IPREASMTIMEOUT:        type = ASN_INTEGER;    case IPINRECEIVES:    case IPINHDRERRORS:    case IPINADDRERRORS:    case IPFORWDATAGRAMS:    case IPINUNKNOWNPROTOS:    case IPINDISCARDS:    case IPINDELIVERS:    case IPOUTREQUESTS:    case IPOUTDISCARDS:    case IPOUTNOROUTES:    case IPREASMREQDS:    case IPREASMOKS:    case IPREASMFAILS:    case IPFRAGOKS:    case IPFRAGFAILS:    case IPFRAGCREATES:    case IPROUTEDISCARDS:	/*	 * This is a bit of a hack, to shoehorn the HP-UX 11	 * single-object retrieval approach into the caching	 * architecture.	 */	if (ip_load(NULL, (void*)subid) == -1 ) {            netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);            continue;	}        ret_value = ipstat;        break;#elif defined (WIN32) || defined (cygwin)    case IPFORWARDING:        ipForwarding = ipstat.dwForwarding;        ret_value    = ipstat.dwForwarding;        type = ASN_INTEGER;        break;    case IPDEFAULTTTL:        ipTTL     = ipstat.dwDefaultTTL;        ret_value = ipstat.dwDefaultTTL;        type = ASN_INTEGER;        break;    case IPINRECEIVES:        ret_value = ipstat.dwInReceives;        break;    case IPINHDRERRORS:        ret_value = ipstat.dwInHdrErrors;        break;    case IPINADDRERRORS:        ret_value = ipstat.dwInAddrErrors;        break;    case IPFORWDATAGRAMS:        ret_value = ipstat.dwForwDatagrams;        break;    case IPINUNKNOWNPROTOS:        ret_value = ipstat.dwInUnknownProtos;        break;    case IPINDISCARDS:        ret_value = ipstat.dwInDiscards;        break;    case IPINDELIVERS:        ret_value = ipstat.dwInDelivers;        break;    case IPOUTREQUESTS:        ret_value = ipstat.dwOutRequests;        break;    case IPOUTDISCARDS:        ret_value = ipstat.dwOutDiscards;        break;    case IPOUTNOROUTES:        ret_value = ipstat.dwOutNoRoutes;        break;    case IPREASMTIMEOUT:        ret_value = ipstat.dwReasmTimeout;        type = ASN_INTEGER;        break;    case IPREASMREQDS:        ret_value = ipstat.dwReasmReqds;        break;    case IPREASMOKS:        ret_value = ipstat.dwReasmOks;        break;    case IPREASMFAILS:        ret_value = ipstat.dwReasmFails;        break;    case IPFRAGOKS:        ret_value = ipstat.dwFragOks;        break;    case IPFRAGFAILS:        ret_value = ipstat.dwFragFails;        break;    case IPFRAGCREATES:        ret_value = ipstat.dwFragCreates;        break;    case IPROUTEDISCARDS:        ret_value = ipstat.dwRoutingDiscards;        break;#elif defined(_USE_PERFSTAT_PROTOCOL)    case IPFORWARDING:        ret_value    = 0;        type = ASN_INTEGER;        break;    case IPDEFAULTTTL:        ret_value = 0;        type = ASN_INTEGER;        break;    case IPINRECEIVES:        ret_value = ps_proto.u.ip.ipackets;        break;    case IPINHDRERRORS:    case IPINADDRERRORS:    case IPFORWDATAGRAMS:        ret_value = 0;        break;    case IPINUNKNOWNPROTOS:        ret_value = ps_proto.u.ip.ierrors;        break;    case IPINDISCARDS:        ret_value = 0;        break;    case IPINDELIVERS:    case IPOUTREQUESTS:        ret_value = ps_proto.u.ip.opackets;        break;    case IPOUTDISCARDS:    case IPOUTNOROUTES:        ret_value = 0;        break;    case IPREASMTIMEOUT:        ret_value = 0;        type = ASN_INTEGER;        break;    case IPREASMREQDS:    case IPREASMOKS:    case IPREASMFAILS:    case IPFRAGOKS:    case IPFRAGFAILS:    case IPFRAGCREATES:        ret_value = 0;        break;    case IPROUTEDISCARDS:        ret_value = ps_proto.u.ip.oerrors;        break;#endif			/* USES_SNMP_DESIGNED_IPSTAT */    case IPADDRTABLE:    case IPROUTETABLE:    case IPMEDIATABLE:        /*	 * These are not actually valid scalar objects.	 * The relevant table registrations should take precedence,	 *   so skip these three subtrees, regardless of architecture.	 */        netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);        continue;	    }	    snmp_set_var_typed_value(request->requestvb, (u_char)type,			             (u_char *)&ret_value, sizeof(ret_value));	}        break;    case MODE_GETNEXT:    case MODE_GETBULK:    case MODE_SET_RESERVE1:		/* XXX - Windows currently supports setting this */    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/ip: Unsupported mode (%d)\n",                               reqinfo->mode);        break;    default:        snmp_log(LOG_WARNING, "mibII/ip: Unrecognised mode (%d)\n",                               reqinfo->mode);        break;    }    return SNMP_ERR_NOERROR;}        /*********************	 *	 *  Internal implementation functions	 *	 *********************/#ifdef hpux11intip_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/ip", "Failed to load IP object %d (hpux11)\n", magic));        return (-1);            /* error */    }    switch (magic) {    case IPFORWARDING:        p.objid = ID_ipForwarding;        break;    case IPDEFAULTTTL:        p.objid = ID_ipDefaultTTL;        break;    case IPINRECEIVES:        p.objid = ID_ipInReceives;        break;    case IPINHDRERRORS:        p.objid = ID_ipInHdrErrors;        break;    case IPINADDRERRORS:        p.objid = ID_ipInAddrErrors;        break;    case IPFORWDATAGRAMS:        p.objid = ID_ipForwDatagrams;        break;    case IPINUNKNOWNPROTOS:        p.objid = ID_ipInUnknownProtos;        break;    case IPINDISCARDS:        p.objid = ID_ipInDiscards;        break;    case IPINDELIVERS:        p.objid = ID_ipInDelivers;        break;    case IPOUTREQUESTS:        p.objid = ID_ipOutRequests;        break;    case IPOUTDISCARDS:        p.objid = ID_ipOutDiscards;        break;    case IPOUTNOROUTES:        p.objid = ID_ipOutNoRoutes;        break;    case IPREASMTIMEOUT:        p.objid = ID_ipReasmTimeout;        break;    case IPREASMREQDS:        p.objid = ID_ipReasmReqds;        break;    case IPREASMOKS:        p.objid = ID_ipReasmOKs;        break;    case IPREASMFAILS:        p.objid = ID_ipReasmFails;        break;    case IPFRAGOKS:        p.objid = ID_ipFragOKs;        break;    case IPFRAGFAILS:        p.objid = ID_ipFragFails;        break;    case IPFRAGCREATES:        p.objid = ID_ipFragCreates;        break;    case IPROUTEDISCARDS:        p.objid = ID_ipRoutingDiscards;        break;    default:        ipstat = 0;        close_mib(fd);        return (0);    }    p.buffer = (void *)&ipstat;    ulen = sizeof(IP_STAT_STRUCTURE);    p.len = &ulen;    ret = get_mib_info(fd, &p);    close_mib(fd);    DEBUGMSGTL(("mibII/ip", "%s IP object %d (hpux11)\n",               (ret < 0 ? "Failed to load" : "Loaded"),  magic));    return (ret);         /* 0: ok, < 0: error */}#elif defined(linux)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    ret_value = linux_read_ip_stat(&ipstat);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (linux)\n"));    } else {        DEBUGMSGTL(("mibII/ip", "Loaded IP Group (linux)\n"));    }    return ret_value;}#elif defined(solaris2)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    ret_value =        getMibstat(MIB_IP, &ipstat, sizeof(mib2_ip_t), GET_FIRST,                   &Get_everything, NULL);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (solaris)\n"));    } else {        DEBUGMSGTL(("mibII/ip", "Loaded IP Group (solaris)\n"));    }    return ret_value;}#elif defined (WIN32) || defined (cygwin)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    ret_value = GetIpStatistics(&ipstat);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (win32)\n"));    } else {        DEBUGMSGTL(("mibII/ip", "Loaded IP Group (win32)\n"));    }    return ret_value;}#elif defined(_USE_PERFSTAT_PROTOCOL)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    strcpy(ps_name.name, "ip");    ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1);    if ( ret_value < 0 ) {        DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (AIX)\n"));    } else {        ret_value = 0;        DEBUGMSGTL(("mibII/ip", "Loaded IP Group (AIX)\n"));    }    return ret_value;}#elif defined(NETSNMP_CAN_USE_SYSCTL) && defined(IPCTL_STATS)intip_load(netsnmp_cache *cache, void *vmagic){    long            ret_value = 0;    int             i;    static int      sname[4] = { CTL_NET, PF_INET, IPPROTO_IP, 0 };    size_t          len;    int             magic = (int) vmagic;    switch (magic) {    case IPFORWARDING:        len = sizeof i;        sname[3] = IPCTL_FORWARDING;        if (sysctl(sname, 4, &i, &len, 0, 0) < 0)            return -1;        else            return (i ? 1 /* GATEWAY */                      : 2 /* HOST    */ );    case IPDEFAULTTTL:        len = sizeof i;        sname[3] = IPCTL_DEFTTL;        if (sysctl(sname, 4, &i, &len, 0, 0) < 0)            return -1;        else            return i;    default:        len = sizeof(ipstat);        sname[3] = IPCTL_STATS;        ret_value = sysctl(sname, 4, &ipstat, &len, 0, 0);        if ( ret_value < 0 ) {            DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (sysctl)\n"));        } else {            DEBUGMSGTL(("mibII/ip", "Loaded IP Group (sysctl)\n"));        }        return ret_value;    }}#elif defined(HAVE_SYS_TCPIPSTATS_H)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    int  magic     = (int) vmagic;    switch (magic) {    case IPFORWARDING:        if (!auto_nlist            (IP_FORWARDING_SYMBOL, (char *) &ret_value, sizeof(ret_value)))            return -1;        else            return (ret_value ? 1 /* GATEWAY */                              : 2 /* HOST    */ );    case IPDEFAULTTTL:        if (!auto_nlist            (TCP_TTL_SYMBOL, (char *) &ret_value, sizeof(ret_value)))            return -1;        else            return ret_value;    default:        ret_value = sysmp(MP_SAGET, MPSA_TCPIPSTATS, &ipstat, sizeof ipstat);        if ( ret_value < 0 ) {            DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (tcpipstats)\n"));        } else {            DEBUGMSGTL(("mibII/ip", "Loaded IP Group (tcpipstats)\n"));        }        return ret_value;    }}#elif defined(IPSTAT_SYMBOL)intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    int  magic     = (int) vmagic;    switch (magic) {    case IPFORWARDING:        if (!auto_nlist            (IP_FORWARDING_SYMBOL, (char *) &ret_value, sizeof(ret_value)))            return -1;        else            return (ret_value ? 1 /* GATEWAY */                              : 2 /* HOST    */ );    case IPDEFAULTTTL:        if (!auto_nlist            (TCP_TTL_SYMBOL, (char *) &ret_value, sizeof(ret_value)))            return -1;        else            return ret_value;    default:        if (auto_nlist(IPSTAT_SYMBOL, (char *)&ipstat, sizeof(ipstat)))            ret_value = 0;        if ( ret_value < 0 ) {            DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (ipstat)\n"));        } else {            DEBUGMSGTL(("mibII/ip", "Loaded IP Group (ipstat)\n"));        }        return ret_value;    }}#else				/* IPSTAT_SYMBOL */intip_load(netsnmp_cache *cache, void *vmagic){    long ret_value = -1;    DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (null)\n"));    return ret_value;}#endif                          /* hpux11 */voidip_free(netsnmp_cache *cache, void *magic){#if defined(_USE_PERFSTAT_PROTOCOL)    memset(&ps_proto, 0, sizeof(ps_proto));#else    memset(&ipstat, 0, sizeof(ipstat));#endif}

⌨️ 快捷键说明

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