freebsd-nq/usr.bin/netstat/netstat.h

152 lines
5.4 KiB
C
Raw Normal View History

1994-05-27 12:33:43 +00:00
/*
* Copyright (c) 1992, 1993
* 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.
*
* @(#)netstat.h 8.2 (Berkeley) 1/4/94
* $FreeBSD$
1994-05-27 12:33:43 +00:00
*/
#include <sys/cdefs.h>
extern int Aflag; /* show addresses of protocol control block */
extern int aflag; /* show all sockets (including servers) */
extern int bflag; /* show i/f total bytes in/out */
extern int dflag; /* show i/f dropped packets */
extern int gflag; /* show group (multicast) routing or stats */
extern int iflag; /* show interfaces */
extern int Lflag; /* show size of listen queues */
extern int mflag; /* show memory stats */
extern int numeric_addr; /* show addresses numerically */
extern int numeric_port; /* show ports numerically */
extern int rflag; /* show routing tables (or routing stats) */
extern int sflag; /* show protocol statistics */
extern int tflag; /* show i/f watchdog timers */
extern int Wflag; /* wide display */
extern int zflag; /* zero stats */
1994-05-27 12:33:43 +00:00
extern int interval; /* repeat interval for i/f stats */
1994-05-27 12:33:43 +00:00
extern char *interface; /* desired i/f for stats, or NULL for all i/fs */
extern int unit; /* unit number for above */
1994-05-27 12:33:43 +00:00
extern int af; /* address family */
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
int kread (u_long addr, char *buf, int size);
const char *plural (int);
const char *plurales (int);
void protopr (u_long, const char *, int);
void tcp_stats (u_long, const char *, int);
void udp_stats (u_long, const char *, int);
void ip_stats (u_long, const char *, int);
void icmp_stats (u_long, const char *, int);
void igmp_stats (u_long, const char *, int);
#ifdef IPSEC
void ipsec_stats (u_long, const char *, int);
#endif
#ifdef INET6
void ip6_stats (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void ip6_ifstats (char *);
void icmp6_stats (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void icmp6_ifstats (char *);
void pim6_stats (u_long, const char *, int);
void rip6_stats (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void mroute6pr (u_long, u_long);
void mrt6_stats (u_long);
struct sockaddr_in6;
struct in6_addr;
2001-06-15 23:35:13 +00:00
char *routename6 (struct sockaddr_in6 *);
const char *netname6 (struct sockaddr_in6 *, struct in6_addr *);
void inet6print (struct in6_addr *, int, const char *, int);
#endif /*INET6*/
2000-07-05 02:02:54 +00:00
#ifdef IPSEC
void pfkey_stats (u_long, const char *, int);
2000-07-05 02:02:54 +00:00
#endif
void bdg_stats (u_long, const char *, int);
1994-05-27 12:33:43 +00:00
Introduce numerous SMP friendly changes to the mbuf allocator. Namely, introduce a modified allocation mechanism for mbufs and mbuf clusters; one which can scale under SMP and which offers the possibility of resource reclamation to be implemented in the future. Notable advantages: o Reduce contention for SMP by offering per-CPU pools and locks. o Better use of data cache due to per-CPU pools. o Much less code cache pollution due to excessively large allocation macros. o Framework for `grouping' objects from same page together so as to be able to possibly free wired-down pages back to the system if they are no longer needed by the network stacks. Additional things changed with this addition: - Moved some mbuf specific declarations and initializations from sys/conf/param.c into mbuf-specific code where they belong. - m_getclr() has been renamed to m_get_clrd() because the old name is really confusing. m_getclr() HAS been preserved though and is defined to the new name. No tree sweep has been done "to change the interface," as the old name will continue to be supported and is not depracated. The change was merely done because m_getclr() sounds too much like "m_get a cluster." - TEMPORARILY disabled mbtypes statistics displaying in netstat(1) and systat(1) (see TODO below). - Fixed systat(1) to display number of "free mbufs" based on new per-CPU stat structures. - Fixed netstat(1) to display new per-CPU stats based on sysctl-exported per-CPU stat structures. All infos are fetched via sysctl. TODO (in order of priority): - Re-enable mbtypes statistics in both netstat(1) and systat(1) after introducing an SMP friendly way to collect the mbtypes stats under the already introduced per-CPU locks (i.e. hopefully don't use atomic() - it seems too costly for a mere stat update, especially when other locks are already present). - Optionally have systat(1) display not only "total free mbufs" but also "total free mbufs per CPU pool." - Fix minor length-fetching issues in netstat(1) related to recently re-enabled option to read mbuf stats from a core file. - Move reference counters at least for mbuf clusters into an unused portion of the cluster itself, to save space and need to allocate a counter. - Look into introducing resource freeing possibly from a kproc. Reviewed by (in parts): jlemon, jake, silby, terry Tested by: jlemon (Intel & Alpha), mjacob (Intel & Alpha) Preliminary performance measurements: jlemon (and me, obviously) URL: http://people.freebsd.org/~bmilekic/mb_alloc/
2001-06-22 06:35:32 +00:00
void mbpr (u_long, u_long, u_long, u_long, u_long, u_long,
u_long, u_long, u_long, u_long, u_long);
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
void hostpr (u_long, u_long);
void impstats (u_long, u_long);
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
void intpr (int, u_long, void (*)(char *));
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
void pr_rthdr (int);
void pr_family (int);
void rt_stats (u_long, u_long);
2001-06-15 23:35:13 +00:00
char *ipx_pnet (struct sockaddr *);
char *ipx_phost (struct sockaddr *);
char *ns_phost (struct sockaddr *);
void upHex (char *);
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
char *routename (u_long);
char *netname (u_long, u_long);
char *atalk_print (struct sockaddr *, int);
char *atalk_print2 (struct sockaddr *, struct sockaddr *, int);
char *ipx_print (struct sockaddr *);
char *ns_print (struct sockaddr *);
void routepr (u_long);
1994-05-27 12:33:43 +00:00
void ipxprotopr (u_long, const char *, int);
void spx_stats (u_long, const char *, int);
void ipx_stats (u_long, const char *, int);
void ipxerr_stats (u_long, const char *, int);
void nsprotopr (u_long, const char *, int);
void spp_stats (u_long, const char *, int);
void idp_stats (u_long, const char *, int);
void nserr_stats (u_long, const char *, int);
1994-05-27 12:33:43 +00:00
void atalkprotopr (u_long, const char *, int);
void ddp_stats (u_long, const char *, int);
void netgraphprotopr (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void unixpr (void);
1994-05-27 12:33:43 +00:00
void esis_stats (u_long, const char *, int);
void clnp_stats (u_long, const char *, int);
void cltp_stats (u_long, const char *, int);
void iso_protopr (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void iso_protopr1 (u_long, int);
void tp_protopr (u_long, const char *, int);
2001-06-15 23:35:13 +00:00
void tp_inproto (u_long);
void tp_stats (caddr_t, caddr_t);
1994-05-27 12:33:43 +00:00
2001-06-15 23:35:13 +00:00
void mroutepr (u_long, u_long);
void mrt_stats (u_long);