📄 tcp.c
字号:
case TCPMAXCONN: case TCPCURRESTAB: if (subid == TCPCURRESTAB) type = ASN_GAUGE; else type = ASN_INTEGER; case TCPACTIVEOPENS: case TCPPASSIVEOPENS: case TCPATTEMPTFAILS: case TCPESTABRESETS: case TCPINSEGS: case TCPOUTSEGS: case TCPRETRANSSEGS: case TCPINERRS: case TCPOUTRSTS: /* * This is a bit of a hack, to shoehorn the HP-UX 11 * single-object retrieval approach into the caching * architecture. */ if (tcp_load(NULL, (void*)subid) == -1 ) { netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT); continue; } ret_value = tcpstat; break;#elif defined (WIN32) || defined (cygwin) case TCPRTOALGORITHM: ret_value = tcpstat.dwRtoAlgorithm; type = ASN_INTEGER; break; case TCPRTOMIN: ret_value = tcpstat.dwRtoMin; type = ASN_INTEGER; break; case TCPRTOMAX: ret_value = tcpstat.dwRtoMax; type = ASN_INTEGER; break; case TCPMAXCONN: ret_value = tcpstat.dwMaxConn; type = ASN_INTEGER; break; case TCPACTIVEOPENS: ret_value = tcpstat.dwActiveOpens; break; case TCPPASSIVEOPENS: ret_value = tcpstat.dwPassiveOpens; break; case TCPATTEMPTFAILS: ret_value = tcpstat.dwAttemptFails; break; case TCPESTABRESETS: ret_value = tcpstat.dwEstabResets; break; case TCPCURRESTAB: ret_value = tcpstat.dwCurrEstab; type = ASN_GAUGE; break; case TCPINSEGS: ret_value = tcpstat.dwInSegs; break; case TCPOUTSEGS: ret_value = tcpstat.dwOutSegs; break; case TCPRETRANSSEGS: ret_value = tcpstat.dwRetransSegs; break; case TCPINERRS: ret_value = tcpstat.dwInErrs; break; case TCPOUTRSTS: ret_value = tcpstat.dwOutRsts; break;#elif defined(_USE_FIRST_PROTOCOL) case TCPRTOALGORITHM: ret_value = 4; type = ASN_INTEGER; break; case TCPRTOMIN: ret_value = 0; type = ASN_INTEGER; break; case TCPRTOMAX: ret_value = 0; type = ASN_INTEGER; break; case TCPMAXCONN: ret_value = -1; type = ASN_INTEGER; break; case TCPACTIVEOPENS: ret_value = ps_proto.u.tcp.initiated; break; case TCPPASSIVEOPENS: ret_value = ps_proto.u.tcp.accepted; break; case TCPATTEMPTFAILS: ret_value = ps_proto.u.tcp.dropped; break; case TCPESTABRESETS: ret_value = ps_proto.u.tcp.dropped; break; case TCPCURRESTAB: /* this value is currently missing */ ret_value = 0; /*ps_proto.u.tcp.established;*/ type = ASN_GAUGE; break; case TCPINSEGS: ret_value = ps_proto.u.tcp.ipackets; break; case TCPOUTSEGS: ret_value = ps_proto.u.tcp.opackets; break; case TCPRETRANSSEGS: ret_value = 0; break; case TCPINERRS: ret_value = ps_proto.u.tcp.ierrors; break; case TCPOUTRSTS: ret_value = 0; break;#endif /* USES_SNMP_DESIGNED_TCPSTAT */ case TCPCONNTABLE: /* * This is not actually a valid scalar object. * The table registration should take precedence, * so skip this subtree, 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: 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/tcp: Unsupported mode (%d)\n", reqinfo->mode); break; default: snmp_log(LOG_WARNING, "mibII/tcp: Unrecognised mode (%d)\n", reqinfo->mode); break; } return SNMP_ERR_NOERROR;} /********************* * * Internal implementation functions * *********************/#ifdef hpux11inttcp_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/tcpScalar", "Failed to load TCP object %d (hpux11)\n", magic)); return (-1); /* error */ } switch (magic) { case TCPRTOALGORITHM: p.objid = ID_tcpRtoAlgorithm; break; case TCPRTOMIN: p.objid = ID_tcpRtoMin; break; case TCPRTOMAX: p.objid = ID_tcpRtoMax; break; case TCPMAXCONN: p.objid = ID_tcpMaxConn; break; case TCPACTIVEOPENS: p.objid = ID_tcpActiveOpens; break; case TCPPASSIVEOPENS: p.objid = ID_tcpPassiveOpens; break; case TCPATTEMPTFAILS: p.objid = ID_tcpAttemptFails; break; case TCPESTABRESETS: p.objid = ID_tcpEstabResets; break; case TCPCURRESTAB: p.objid = ID_tcpCurrEstab; break; case TCPINSEGS: p.objid = ID_tcpInSegs; break; case TCPOUTSEGS: p.objid = ID_tcpOutSegs; break; case TCPRETRANSSEGS: p.objid = ID_tcpRetransSegs; break; case TCPINERRS: p.objid = ID_tcpInErrs; break; case TCPOUTRSTS: p.objid = ID_tcpOutRsts; break; default: tcpstat = 0; close_mib(fd); return -1; } p.buffer = (void *)&tcpstat; ulen = sizeof(TCP_STAT_STRUCTURE); p.len = &ulen; ret = get_mib_info(fd, &p); close_mib(fd); DEBUGMSGTL(("mibII/tcpScalar", "%s TCP object %d (hpux11)\n", (ret < 0 ? "Failed to load" : "Loaded"), magic)); return (ret); /* 0: ok, < 0: error */}#elif defined(linux)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; ret_value = linux_read_tcp_stat(&tcpstat); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (linux)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (linux)\n")); } return ret_value;}#elif defined(solaris2)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; int magic = (int)vmagic; mib2_ip_t ipstat; /* * tcpInErrs is actually implemented as part of the MIB_IP group * so we need to retrieve this independently */ if (magic == TCPINERRS) { if (getMibstat (MIB_IP, &ipstat, sizeof(mib2_ip_t), GET_FIRST, &Get_everything, NULL) < 0) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP object %d (solaris)\n", magic)); return -1; } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP object %d (solaris)\n", magic)); return ipstat.tcpInErrs; } } /* * Otherwise, retrieve the whole of the MIB_TCP group (and cache it) */ ret_value = getMibstat(MIB_TCP, &tcpstat, sizeof(mib2_tcp_t), GET_FIRST, &Get_everything, NULL); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (solaris)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (solaris)\n")); } return ret_value;}#elif defined (WIN32) || defined (cygwin)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; ret_value = GetTcpStatistics(&tcpstat); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (win32)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (win32)\n")); } return ret_value;}#elif defined(_USE_FIRST_PROTOCOL)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; strcpy(ps_name.name, "tcp"); ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (AIX)\n")); } else { ret_value = 0; DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (AIX)\n")); } return ret_value;}#elif (defined(NETSNMP_CAN_USE_SYSCTL) && defined(TCPCTL_STATS))inttcp_load(netsnmp_cache *cache, void *vmagic){ int sname[4] = { CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_STATS }; size_t len = sizeof(tcpstat); long ret_value = -1; ret_value = sysctl(sname, 4, &tcpstat, &len, 0, 0); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (sysctl)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (sysctl)\n")); } return ret_value;}#elif defined(HAVE_SYS_TCPIPSTATS_H)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; ret_value = sysmp(MP_SAGET, MPSA_TCPIPSTATS, &tcpstat, sizeof(tcpstat)); if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (tcpipstats)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (tcpipstats)\n")); } return ret_value;}#elif defined(TCPSTAT_SYMBOL)inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; if (auto_nlist(TCPSTAT_SYMBOL, (char *)&tcpstat, sizeof(tcpstat))) ret_value = 0; if ( ret_value < 0 ) { DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (tcpstat)\n")); } else { DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (tcpstat)\n")); } return ret_value;}#else /* TCPSTAT_SYMBOL */inttcp_load(netsnmp_cache *cache, void *vmagic){ long ret_value = -1; DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (null)\n")); return ret_value;}#endif /* WIN32 cygwin */voidtcp_free(netsnmp_cache *cache, void *magic){#if defined(_USE_FIRST_PROTOCOL) memset(&ps_proto, 0, sizeof(ps_proto));#else memset(&tcpstat, 0, sizeof(tcpstat));#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -