]>
git.saurik.com Git - apple/network_cmds.git/blob - netstat.tproj/mbuf.c
260f6aa1502e43d60c03522d7e06e6fcc45bccc5
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
23 * @APPLE_LICENSE_HEADER_END@
26 * Copyright (c) 1983, 1988, 1993
27 * The Regents of the University of California. All rights reserved.
29 * Redistribution and use in source and binary forms, with or without
30 * modification, are permitted provided that the following conditions
32 * 1. Redistributions of source code must retain the above copyright
33 * notice, this list of conditions and the following disclaimer.
34 * 2. Redistributions in binary form must reproduce the above copyright
35 * notice, this list of conditions and the following disclaimer in the
36 * documentation and/or other materials provided with the distribution.
37 * 3. All advertising materials mentioning features or use of this software
38 * must display the following acknowledgement:
39 * This product includes software developed by the University of
40 * California, Berkeley and its contributors.
41 * 4. Neither the name of the University nor the names of its contributors
42 * may be used to endorse or promote products derived from this software
43 * without specific prior written permission.
45 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
46 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
49 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59 #include <sys/param.h>
60 #include <sys/protosw.h>
61 #include <sys/socket.h>
66 #include <netat/sysglue.h> /* To get Appletalk message/mbuf types */
73 static struct mbtypes
{
78 { MT_OOBDATA
, "oob data" },
79 { MT_CONTROL
, "ancillary data" },
80 { MT_HEADER
, "packet headers" },
81 { MT_SOCKET
, "socket structures" }, /* XXX */
82 { MT_PCB
, "protocol control blocks" }, /* XXX */
83 { MT_RTABLE
, "routing table entries" }, /* XXX */
84 { MT_HTABLE
, "IMP host table entries" }, /* XXX */
85 { MT_ATABLE
, "address resolution tables" },
86 { MT_FTABLE
, "fragment reassembly queue headers" }, /* XXX */
87 { MT_SONAME
, "socket names and addresses" },
88 { MT_SOOPTS
, "socket options" },
89 { MT_RIGHTS
, "access rights" },
90 { MT_IFADDR
, "interface addresses" }, /* XXX */
91 { MSG_DATA
, "Appletalk data blocks"},
92 { MSG_PROTO
, "Appletalk internal msgs"},
93 { MSG_IOCTL
, "Appletalk ioctl requests"},
94 { MSG_ERROR
, "Appletalk error indicators"},
95 { MSG_HANGUP
, "Appletalk termination requests"},
96 { MSG_IOCACK
, "Appletalk ioctl acks"},
97 { MSG_IOCNAK
, "Appletalk ioctl failure indicators"},
98 { MSG_CTL
, "Appletalk control msgs"},
102 int nmbtypes
= sizeof(mbstat
.m_mtypes
) / sizeof(short);
103 bool seen
[256]; /* "have we seen this type yet?" */
106 * Print mbuf statistics.
112 register int totmem
, totfree
, totmbufs
;
114 register struct mbtypes
*mp
;
116 if (nmbtypes
!= 256) {
118 "netstat: unexpected change to mbstat; check source\n");
122 fprintf(stderr
, "netstat: mbstat: symbol not in namelist\n");
125 if (kread(mbaddr
, (char *)&mbstat
, sizeof (mbstat
)))
129 for (mp
= mbtypes
; mp
->mt_name
; mp
++)
130 totmbufs
+= mbstat
.m_mtypes
[mp
->mt_type
];
131 printf("%u mbufs in use:\n", totmbufs
);
132 for (mp
= mbtypes
; mp
->mt_name
; mp
++)
133 if (mbstat
.m_mtypes
[mp
->mt_type
]) {
134 seen
[mp
->mt_type
] = YES
;
135 printf("\t%u mbufs allocated to %s\n",
136 mbstat
.m_mtypes
[mp
->mt_type
], mp
->mt_name
);
139 for (i
= 0; i
< nmbtypes
; i
++)
140 if (!seen
[i
] && mbstat
.m_mtypes
[i
]) {
141 printf("\t%u mbufs allocated to <mbuf type %d>\n",
142 mbstat
.m_mtypes
[i
], i
);
144 printf("%u/%u mbuf clusters in use\n",
145 (unsigned int)(mbstat
.m_clusters
- mbstat
.m_clfree
),
146 (unsigned int)mbstat
.m_clusters
);
147 totmem
= totmbufs
* MSIZE
+ mbstat
.m_clusters
* MCLBYTES
;
148 totfree
= mbstat
.m_clfree
* MCLBYTES
;
149 printf("%u Kbytes allocated to network (%d%% in use)\n",
150 totmem
/ 1024, (totmem
- totfree
) * 100 / totmem
);
151 printf("%u requests for memory denied\n",
152 (unsigned int)mbstat
.m_drops
);
153 printf("%u requests for memory delayed\n", (unsigned int)mbstat
.m_wait
);
154 printf("%u calls to protocol drain routines\n",
155 (unsigned int)mbstat
.m_drain
);