mbuf.c

来自「早期freebsd实现」· C语言 代码 · 共 123 行

C
123
字号
/* * Copyright (c) 1983, 1988, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic char sccsid[] = "@(#)mbuf.c	8.1 (Berkeley) 6/6/93";#endif /* not lint */#include <sys/param.h>#include <sys/protosw.h>#include <sys/socket.h>#include <sys/mbuf.h>#include <stdio.h>#include "netstat.h"#define	YES	1typedef int bool;struct	mbstat mbstat;static struct mbtypes {	int	mt_type;	char	*mt_name;} mbtypes[] = {	{ MT_DATA,	"data" },	{ MT_OOBDATA,	"oob data" },	{ MT_CONTROL,	"ancillary data" },	{ MT_HEADER,	"packet headers" },	{ MT_SOCKET,	"socket structures" },			/* XXX */	{ MT_PCB,	"protocol control blocks" },		/* XXX */	{ MT_RTABLE,	"routing table entries" },		/* XXX */	{ MT_HTABLE,	"IMP host table entries" },		/* XXX */	{ MT_ATABLE,	"address resolution tables" },	{ MT_FTABLE,	"fragment reassembly queue headers" },	/* XXX */	{ MT_SONAME,	"socket names and addresses" },	{ MT_SOOPTS,	"socket options" },	{ MT_RIGHTS,	"access rights" },	{ MT_IFADDR,	"interface addresses" },		/* XXX */	{ 0, 0 }};int nmbtypes = sizeof(mbstat.m_mtypes) / sizeof(short);bool seen[256];			/* "have we seen this type yet?" *//* * Print mbuf statistics. */voidmbpr(mbaddr)	u_long mbaddr;{	register int totmem, totfree, totmbufs;	register int i;	register struct mbtypes *mp;	if (nmbtypes != 256) {		fprintf(stderr,		    "%s: unexpected change to mbstat; check source\n", prog);		return;	}	if (mbaddr == 0) {		fprintf(stderr, "%s: mbstat: symbol not in namelist\n", prog);		return;	}	if (kread(mbaddr, (char *)&mbstat, sizeof (mbstat)))		return;	totmbufs = 0;	for (mp = mbtypes; mp->mt_name; mp++)		totmbufs += mbstat.m_mtypes[mp->mt_type];	printf("%u mbufs in use:\n", totmbufs);	for (mp = mbtypes; mp->mt_name; mp++)		if (mbstat.m_mtypes[mp->mt_type]) {			seen[mp->mt_type] = YES;			printf("\t%u mbufs allocated to %s\n",			    mbstat.m_mtypes[mp->mt_type], mp->mt_name);		}	seen[MT_FREE] = YES;	for (i = 0; i < nmbtypes; i++)		if (!seen[i] && mbstat.m_mtypes[i]) {			printf("\t%u mbufs allocated to <mbuf type %d>\n",			    mbstat.m_mtypes[i], i);		}	printf("%u/%u mapped pages in use\n",		mbstat.m_clusters - mbstat.m_clfree, mbstat.m_clusters);	totmem = totmbufs * MSIZE + mbstat.m_clusters * MCLBYTES;	totfree = mbstat.m_clfree * MCLBYTES;	printf("%u Kbytes allocated to network (%d%% in use)\n",		totmem / 1024, (totmem - totfree) * 100 / totmem);	printf("%u requests for memory denied\n", mbstat.m_drops);	printf("%u requests for memory delayed\n", mbstat.m_wait);	printf("%u calls to protocol drain routines\n", mbstat.m_drain);}

⌨️ 快捷键说明

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