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

📄 tcp.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -