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

📄 kernel_linux.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
字号:
/* *  Linux kernel interface * */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include "util_funcs.h"#if HAVE_STRING_H#include <string.h>#endif#include <sys/types.h>#if HAVE_SYS_PARAM_H#include <sys/param.h>#endif#include "kernel_linux.h"struct ip_mib   cached_ip_mib;struct icmp_mib cached_icmp_mib;struct tcp_mib  cached_tcp_mib;struct udp_mib  cached_udp_mib;#define IP_STATS_LINE	"Ip: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"#define ICMP_STATS_LINE	"Icmp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"#define TCP_STATS_LINE	"Tcp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"#define UDP_STATS_LINE	"Udp: %lu %lu %lu %lu"#define IP_STATS_PREFIX_LEN	4#define ICMP_STATS_PREFIX_LEN	6#define TCP_STATS_PREFIX_LEN	5#define UDP_STATS_PREFIX_LEN	5intlinux_read_mibII_stats(void){    FILE           *in = fopen("/proc/net/snmp", "r");    char            line[1024];    if (!in) {        return -1;    }    while (line == fgets(line, sizeof(line), in)) {        if (!strncmp(line, IP_STATS_LINE, IP_STATS_PREFIX_LEN)) {            sscanf(line, IP_STATS_LINE,                   &cached_ip_mib.ipForwarding,                   &cached_ip_mib.ipDefaultTTL,                   &cached_ip_mib.ipInReceives,                   &cached_ip_mib.ipInHdrErrors,                   &cached_ip_mib.ipInAddrErrors,                   &cached_ip_mib.ipForwDatagrams,                   &cached_ip_mib.ipInUnknownProtos,                   &cached_ip_mib.ipInDiscards,                   &cached_ip_mib.ipInDelivers,                   &cached_ip_mib.ipOutRequests,                   &cached_ip_mib.ipOutDiscards,                   &cached_ip_mib.ipOutNoRoutes,                   &cached_ip_mib.ipReasmTimeout,                   &cached_ip_mib.ipReasmReqds,                   &cached_ip_mib.ipReasmOKs,                   &cached_ip_mib.ipReasmFails,                   &cached_ip_mib.ipFragOKs,                   &cached_ip_mib.ipFragFails,                   &cached_ip_mib.ipFragCreates);            cached_ip_mib.ipRoutingDiscards = 0;        /* XXX */        } else if (!strncmp(line, ICMP_STATS_LINE, ICMP_STATS_PREFIX_LEN)) {            sscanf(line, ICMP_STATS_LINE,                   &cached_icmp_mib.icmpInMsgs,                   &cached_icmp_mib.icmpInErrors,                   &cached_icmp_mib.icmpInDestUnreachs,                   &cached_icmp_mib.icmpInTimeExcds,                   &cached_icmp_mib.icmpInParmProbs,                   &cached_icmp_mib.icmpInSrcQuenchs,                   &cached_icmp_mib.icmpInRedirects,                   &cached_icmp_mib.icmpInEchos,                   &cached_icmp_mib.icmpInEchoReps,                   &cached_icmp_mib.icmpInTimestamps,                   &cached_icmp_mib.icmpInTimestampReps,                   &cached_icmp_mib.icmpInAddrMasks,                   &cached_icmp_mib.icmpInAddrMaskReps,                   &cached_icmp_mib.icmpOutMsgs,                   &cached_icmp_mib.icmpOutErrors,                   &cached_icmp_mib.icmpOutDestUnreachs,                   &cached_icmp_mib.icmpOutTimeExcds,                   &cached_icmp_mib.icmpOutParmProbs,                   &cached_icmp_mib.icmpOutSrcQuenchs,                   &cached_icmp_mib.icmpOutRedirects,                   &cached_icmp_mib.icmpOutEchos,                   &cached_icmp_mib.icmpOutEchoReps,                   &cached_icmp_mib.icmpOutTimestamps,                   &cached_icmp_mib.icmpOutTimestampReps,                   &cached_icmp_mib.icmpOutAddrMasks,                   &cached_icmp_mib.icmpOutAddrMaskReps);        } else if (!strncmp(line, TCP_STATS_LINE, TCP_STATS_PREFIX_LEN)) {            int             ret = sscanf(line, TCP_STATS_LINE,                                         &cached_tcp_mib.tcpRtoAlgorithm,                                         &cached_tcp_mib.tcpRtoMin,                                         &cached_tcp_mib.tcpRtoMax,                                         &cached_tcp_mib.tcpMaxConn,                                         &cached_tcp_mib.tcpActiveOpens,                                         &cached_tcp_mib.tcpPassiveOpens,                                         &cached_tcp_mib.tcpAttemptFails,                                         &cached_tcp_mib.tcpEstabResets,                                         &cached_tcp_mib.tcpCurrEstab,                                         &cached_tcp_mib.tcpInSegs,                                         &cached_tcp_mib.tcpOutSegs,                                         &cached_tcp_mib.tcpRetransSegs,                                         &cached_tcp_mib.tcpInErrs,                                         &cached_tcp_mib.tcpOutRsts);            cached_tcp_mib.tcpInErrsValid = (ret > 12) ? 1 : 0;            cached_tcp_mib.tcpOutRstsValid = (ret > 13) ? 1 : 0;        } else if (!strncmp(line, UDP_STATS_LINE, UDP_STATS_PREFIX_LEN)) {            sscanf(line, UDP_STATS_LINE,                   &cached_udp_mib.udpInDatagrams,                   &cached_udp_mib.udpNoPorts,                   &cached_udp_mib.udpInErrors,                   &cached_udp_mib.udpOutDatagrams);        }    }    fclose(in);    /*     * Tweak illegal values:     *     * valid values for ipForwarding are 1 == yup, 2 == nope     * a 0 is forbidden, so patch:     */    if (!cached_ip_mib.ipForwarding)        cached_ip_mib.ipForwarding = 2;    /*     * 0 is illegal for tcpRtoAlgorithm     * so assume `other' algorithm:     */    if (!cached_tcp_mib.tcpRtoAlgorithm)        cached_tcp_mib.tcpRtoAlgorithm = 1;    return 0;}intlinux_read_ip_stat(struct ip_mib *ipstat){    memset((char *) ipstat, (0), sizeof(*ipstat));    if (linux_read_mibII_stats() == -1)        return -1;    memcpy((char *) ipstat, (char *) &cached_ip_mib, sizeof(*ipstat));    return 0;}intlinux_read_icmp_stat(struct icmp_mib *icmpstat){    memset((char *) icmpstat, (0), sizeof(*icmpstat));    if (linux_read_mibII_stats() == -1)        return -1;    memcpy((char *) icmpstat, (char *) &cached_icmp_mib,           sizeof(*icmpstat));    return 0;}intlinux_read_tcp_stat(struct tcp_mib *tcpstat){    memset((char *) tcpstat, (0), sizeof(*tcpstat));    if (linux_read_mibII_stats() == -1)        return -1;    memcpy((char *) tcpstat, (char *) &cached_tcp_mib, sizeof(*tcpstat));    return 0;}intlinux_read_udp_stat(struct udp_mib *udpstat){    memset((char *) udpstat, (0), sizeof(*udpstat));    if (linux_read_mibII_stats() == -1)        return -1;    memcpy((char *) udpstat, (char *) &cached_udp_mib, sizeof(*udpstat));    return 0;}

⌨️ 快捷键说明

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