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