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

📄 kernel_linux.c

📁 ucd-snmp源代码
💻 C
字号:
/* *  Linux kernel interface * */#include <config.h>#include "mibincl.h"#include "util_funcs.h"#include "tools.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"#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	5#ifndef MIB_STATS_CACHE_TIMEOUT#define MIB_STATS_CACHE_TIMEOUT	5#endif#ifndef LINUX_STATS_CACHE_TIMEOUT#define LINUX_STATS_CACHE_TIMEOUT	MIB_STATS_CACHE_TIMEOUT#endifmarker_t linux_mibII_stats_cache_marker = NULL;intlinux_read_mibII_stats ( void ){    FILE *in = fopen ("/proc/net/snmp", "r");    char line [1024];    if (! in) {	free (linux_mibII_stats_cache_marker);	linux_mibII_stats_cache_marker = NULL;	return -1;    }    if (linux_mibII_stats_cache_marker &&	(!atime_ready( linux_mibII_stats_cache_marker, LINUX_STATS_CACHE_TIMEOUT*1000 )))	return 0;    if (linux_mibII_stats_cache_marker )	atime_setMarker( linux_mibII_stats_cache_marker );    else	linux_mibII_stats_cache_marker = atime_newMarker();    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 )) {	    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);	}	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 + -