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

📄 proc.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	SNMP_MIB_ITEM("TCPAbortFailed", LINUX_MIB_TCPABORTFAILED),	SNMP_MIB_ITEM("TCPMemoryPressures", LINUX_MIB_TCPMEMORYPRESSURES),	SNMP_MIB_ITEM("TCPSACKDiscard", LINUX_MIB_TCPSACKDISCARD),	SNMP_MIB_ITEM("TCPDSACKIgnoredOld", LINUX_MIB_TCPDSACKIGNOREDOLD),	SNMP_MIB_ITEM("TCPDSACKIgnoredNoUndo", LINUX_MIB_TCPDSACKIGNOREDNOUNDO),	SNMP_MIB_ITEM("TCPSpuriousRTOs", LINUX_MIB_TCPSPURIOUSRTOS),	SNMP_MIB_SENTINEL};static void icmpmsg_put(struct seq_file *seq){#define PERLINE	16	int j, i, count;	static int out[PERLINE];	count = 0;	for (i = 0; i < ICMPMSG_MIB_MAX; i++) {		if (snmp_fold_field((void **) icmpmsg_statistics, i))			out[count++] = i;		if (count < PERLINE)			continue;		seq_printf(seq, "\nIcmpMsg:");		for (j = 0; j < PERLINE; ++j)			seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In",					i & 0xff);		seq_printf(seq, "\nIcmpMsg: ");		for (j = 0; j < PERLINE; ++j)			seq_printf(seq, " %lu",				snmp_fold_field((void **) icmpmsg_statistics,				out[j]));		seq_putc(seq, '\n');	}	if (count) {		seq_printf(seq, "\nIcmpMsg:");		for (j = 0; j < count; ++j)			seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" :				"In", out[j] & 0xff);		seq_printf(seq, "\nIcmpMsg:");		for (j = 0; j < count; ++j)			seq_printf(seq, " %lu", snmp_fold_field((void **)				icmpmsg_statistics, out[j]));	}#undef PERLINE}static void icmp_put(struct seq_file *seq){	int i;	seq_puts(seq, "\nIcmp: InMsgs InErrors");	for (i=0; icmpmibmap[i].name != NULL; i++)		seq_printf(seq, " In%s", icmpmibmap[i].name);	seq_printf(seq, " OutMsgs OutErrors");	for (i=0; icmpmibmap[i].name != NULL; i++)		seq_printf(seq, " Out%s", icmpmibmap[i].name);	seq_printf(seq, "\nIcmp: %lu %lu",		snmp_fold_field((void **) icmp_statistics, ICMP_MIB_INMSGS),		snmp_fold_field((void **) icmp_statistics, ICMP_MIB_INERRORS));	for (i=0; icmpmibmap[i].name != NULL; i++)		seq_printf(seq, " %lu",			snmp_fold_field((void **) icmpmsg_statistics,				icmpmibmap[i].index));	seq_printf(seq, " %lu %lu",		snmp_fold_field((void **) icmp_statistics, ICMP_MIB_OUTMSGS),		snmp_fold_field((void **) icmp_statistics, ICMP_MIB_OUTERRORS));	for (i=0; icmpmibmap[i].name != NULL; i++)		seq_printf(seq, " %lu",			snmp_fold_field((void **) icmpmsg_statistics,				icmpmibmap[i].index | 0x100));}/* *	Called from the PROCfs module. This outputs /proc/net/snmp. */static int snmp_seq_show(struct seq_file *seq, void *v){	int i;	seq_puts(seq, "Ip: Forwarding DefaultTTL");	for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_ipstats_list[i].name);	seq_printf(seq, "\nIp: %d %d",		   IPV4_DEVCONF_ALL(FORWARDING) ? 1 : 2, sysctl_ip_default_ttl);	for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)		seq_printf(seq, " %lu",			   snmp_fold_field((void **)ip_statistics,					   snmp4_ipstats_list[i].entry));	icmp_put(seq);	/* RFC 2011 compatibility */	icmpmsg_put(seq);	seq_puts(seq, "\nTcp:");	for (i = 0; snmp4_tcp_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_tcp_list[i].name);	seq_puts(seq, "\nTcp:");	for (i = 0; snmp4_tcp_list[i].name != NULL; i++) {		/* MaxConn field is signed, RFC 2012 */		if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN)			seq_printf(seq, " %ld",				   snmp_fold_field((void **)tcp_statistics,						   snmp4_tcp_list[i].entry));		else			seq_printf(seq, " %lu",				   snmp_fold_field((void **)tcp_statistics,						   snmp4_tcp_list[i].entry));	}	seq_puts(seq, "\nUdp:");	for (i = 0; snmp4_udp_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_udp_list[i].name);	seq_puts(seq, "\nUdp:");	for (i = 0; snmp4_udp_list[i].name != NULL; i++)		seq_printf(seq, " %lu",			   snmp_fold_field((void **)udp_statistics,					   snmp4_udp_list[i].entry));	/* the UDP and UDP-Lite MIBs are the same */	seq_puts(seq, "\nUdpLite:");	for (i = 0; snmp4_udp_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_udp_list[i].name);	seq_puts(seq, "\nUdpLite:");	for (i = 0; snmp4_udp_list[i].name != NULL; i++)		seq_printf(seq, " %lu",			   snmp_fold_field((void **)udplite_statistics,					   snmp4_udp_list[i].entry));	seq_putc(seq, '\n');	return 0;}static int snmp_seq_open(struct inode *inode, struct file *file){	return single_open(file, snmp_seq_show, NULL);}static const struct file_operations snmp_seq_fops = {	.owner	 = THIS_MODULE,	.open	 = snmp_seq_open,	.read	 = seq_read,	.llseek	 = seq_lseek,	.release = single_release,};/* *	Output /proc/net/netstat */static int netstat_seq_show(struct seq_file *seq, void *v){	int i;	seq_puts(seq, "TcpExt:");	for (i = 0; snmp4_net_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_net_list[i].name);	seq_puts(seq, "\nTcpExt:");	for (i = 0; snmp4_net_list[i].name != NULL; i++)		seq_printf(seq, " %lu",			   snmp_fold_field((void **)net_statistics,					   snmp4_net_list[i].entry));	seq_puts(seq, "\nIpExt:");	for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)		seq_printf(seq, " %s", snmp4_ipextstats_list[i].name);	seq_puts(seq, "\nIpExt:");	for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)		seq_printf(seq, " %lu",			   snmp_fold_field((void **)ip_statistics,					   snmp4_ipextstats_list[i].entry));	seq_putc(seq, '\n');	return 0;}static int netstat_seq_open(struct inode *inode, struct file *file){	return single_open(file, netstat_seq_show, NULL);}static const struct file_operations netstat_seq_fops = {	.owner	 = THIS_MODULE,	.open	 = netstat_seq_open,	.read	 = seq_read,	.llseek	 = seq_lseek,	.release = single_release,};int __init ip_misc_proc_init(void){	int rc = 0;	if (!proc_net_fops_create(&init_net, "netstat", S_IRUGO, &netstat_seq_fops))		goto out_netstat;	if (!proc_net_fops_create(&init_net, "snmp", S_IRUGO, &snmp_seq_fops))		goto out_snmp;	if (!proc_net_fops_create(&init_net, "sockstat", S_IRUGO, &sockstat_seq_fops))		goto out_sockstat;out:	return rc;out_sockstat:	proc_net_remove(&init_net, "snmp");out_snmp:	proc_net_remove(&init_net, "netstat");out_netstat:	rc = -ENOMEM;	goto out;}

⌨️ 快捷键说明

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