📄 ip.c
字号:
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 + -