11eaf0ac3Slogwang /*- 222ce4affSfengbojiang * SPDX-License-Identifier: BSD-3-Clause 322ce4affSfengbojiang * 41eaf0ac3Slogwang * Copyright (c) 1992, 1993 51eaf0ac3Slogwang * Regents of the University of California. All rights reserved. 61eaf0ac3Slogwang * 71eaf0ac3Slogwang * Redistribution and use in source and binary forms, with or without 81eaf0ac3Slogwang * modification, are permitted provided that the following conditions 91eaf0ac3Slogwang * are met: 101eaf0ac3Slogwang * 1. Redistributions of source code must retain the above copyright 111eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer. 121eaf0ac3Slogwang * 2. Redistributions in binary form must reproduce the above copyright 131eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer in the 141eaf0ac3Slogwang * documentation and/or other materials provided with the distribution. 1522ce4affSfengbojiang * 3. Neither the name of the University nor the names of its contributors 161eaf0ac3Slogwang * may be used to endorse or promote products derived from this software 171eaf0ac3Slogwang * without specific prior written permission. 181eaf0ac3Slogwang * 191eaf0ac3Slogwang * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 201eaf0ac3Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 211eaf0ac3Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 221eaf0ac3Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 231eaf0ac3Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 241eaf0ac3Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 251eaf0ac3Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 261eaf0ac3Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 271eaf0ac3Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 281eaf0ac3Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 291eaf0ac3Slogwang * SUCH DAMAGE. 301eaf0ac3Slogwang * 311eaf0ac3Slogwang * @(#)netstat.h 8.2 (Berkeley) 1/4/94 321eaf0ac3Slogwang * $FreeBSD$ 331eaf0ac3Slogwang */ 341eaf0ac3Slogwang 351eaf0ac3Slogwang #include <sys/cdefs.h> 361eaf0ac3Slogwang 37*d4a07e70Sfengbojiang #ifdef FSTACK 38*d4a07e70Sfengbojiang #ifndef __unused 39*d4a07e70Sfengbojiang #define __unused __attribute__((__unused__)) 40*d4a07e70Sfengbojiang #endif 41*d4a07e70Sfengbojiang #endif 42*d4a07e70Sfengbojiang 431eaf0ac3Slogwang #define satosin(sa) ((struct sockaddr_in *)(sa)) 441eaf0ac3Slogwang #define satosin6(sa) ((struct sockaddr_in6 *)(sa)) 451eaf0ac3Slogwang #define sin6tosa(sin6) ((struct sockaddr *)(sin6)) 461eaf0ac3Slogwang 471eaf0ac3Slogwang extern int Aflag; /* show addresses of protocol control block */ 481eaf0ac3Slogwang extern int aflag; /* show all sockets (including servers) */ 491eaf0ac3Slogwang extern int bflag; /* show i/f total bytes in/out */ 5022ce4affSfengbojiang extern int cflag; /* show congestion control stats */ 5122ce4affSfengbojiang extern int Cflag; /* show congestion control algo and stack */ 521eaf0ac3Slogwang extern int dflag; /* show i/f dropped packets */ 531eaf0ac3Slogwang extern int gflag; /* show group (multicast) routing or stats */ 541eaf0ac3Slogwang extern int hflag; /* show counters in human readable format */ 551eaf0ac3Slogwang extern int iflag; /* show interfaces */ 561eaf0ac3Slogwang extern int Lflag; /* show size of listen queues */ 571eaf0ac3Slogwang extern int mflag; /* show memory stats */ 581eaf0ac3Slogwang extern int noutputs; /* how much outputs before we exit */ 591eaf0ac3Slogwang extern int numeric_addr; /* show addresses numerically */ 601eaf0ac3Slogwang extern int numeric_port; /* show ports numerically */ 6122ce4affSfengbojiang extern int Pflag; /* show TCP log ID */ 621eaf0ac3Slogwang extern int rflag; /* show routing tables (or routing stats) */ 631eaf0ac3Slogwang extern int Rflag; /* show flowid / RSS information */ 641eaf0ac3Slogwang extern int sflag; /* show protocol statistics */ 651eaf0ac3Slogwang extern int Tflag; /* show TCP control block info */ 661eaf0ac3Slogwang extern int Wflag; /* wide display */ 671eaf0ac3Slogwang extern int xflag; /* extended display, includes all socket buffer info */ 681eaf0ac3Slogwang extern int zflag; /* zero stats */ 691eaf0ac3Slogwang 701eaf0ac3Slogwang extern int interval; /* repeat interval for i/f stats */ 711eaf0ac3Slogwang 721eaf0ac3Slogwang extern char *interface; /* desired i/f for stats, or NULL for all i/fs */ 731eaf0ac3Slogwang extern int unit; /* unit number for above */ 741eaf0ac3Slogwang 751eaf0ac3Slogwang extern int live; /* true if we are examining a live system */ 761eaf0ac3Slogwang 771eaf0ac3Slogwang typedef int kreadfn_t(u_long, void *, size_t); 781eaf0ac3Slogwang int fetch_stats(const char *, u_long, void *, size_t, kreadfn_t); 791eaf0ac3Slogwang int fetch_stats_ro(const char *, u_long, void *, size_t, kreadfn_t); 801eaf0ac3Slogwang 811eaf0ac3Slogwang int kread(u_long addr, void *buf, size_t size); 821eaf0ac3Slogwang uint64_t kread_counter(u_long addr); 831eaf0ac3Slogwang int kread_counters(u_long addr, void *buf, size_t size); 841eaf0ac3Slogwang void kset_dpcpu(u_int); 851eaf0ac3Slogwang const char *plural(uintmax_t); 861eaf0ac3Slogwang const char *plurales(uintmax_t); 871eaf0ac3Slogwang const char *pluralies(uintmax_t); 881eaf0ac3Slogwang 891eaf0ac3Slogwang struct sockaddr; 901eaf0ac3Slogwang struct socket; 911eaf0ac3Slogwang struct xsocket; 921eaf0ac3Slogwang int sotoxsocket(struct socket *, struct xsocket *); 931eaf0ac3Slogwang void protopr(u_long, const char *, int, int); 941eaf0ac3Slogwang void tcp_stats(u_long, const char *, int, int); 951eaf0ac3Slogwang void udp_stats(u_long, const char *, int, int); 961eaf0ac3Slogwang #ifdef SCTP 971eaf0ac3Slogwang void sctp_protopr(u_long, const char *, int, int); 981eaf0ac3Slogwang void sctp_stats(u_long, const char *, int, int); 991eaf0ac3Slogwang #endif 1001eaf0ac3Slogwang void arp_stats(u_long, const char *, int, int); 1011eaf0ac3Slogwang void ip_stats(u_long, const char *, int, int); 1021eaf0ac3Slogwang void icmp_stats(u_long, const char *, int, int); 1031eaf0ac3Slogwang void igmp_stats(u_long, const char *, int, int); 1041eaf0ac3Slogwang void pim_stats(u_long, const char *, int, int); 1051eaf0ac3Slogwang void carp_stats(u_long, const char *, int, int); 1061eaf0ac3Slogwang void pfsync_stats(u_long, const char *, int, int); 1071eaf0ac3Slogwang #ifdef IPSEC 1081eaf0ac3Slogwang void ipsec_stats(u_long, const char *, int, int); 1091eaf0ac3Slogwang void esp_stats(u_long, const char *, int, int); 1101eaf0ac3Slogwang void ah_stats(u_long, const char *, int, int); 1111eaf0ac3Slogwang void ipcomp_stats(u_long, const char *, int, int); 1121eaf0ac3Slogwang #endif 1131eaf0ac3Slogwang 11422ce4affSfengbojiang #ifdef INET 11522ce4affSfengbojiang struct in_addr; 11622ce4affSfengbojiang 11722ce4affSfengbojiang char *inetname(struct in_addr *); 11822ce4affSfengbojiang #endif 11922ce4affSfengbojiang 1201eaf0ac3Slogwang #ifdef INET6 12122ce4affSfengbojiang struct in6_addr; 12222ce4affSfengbojiang 12322ce4affSfengbojiang char *inet6name(struct in6_addr *); 1241eaf0ac3Slogwang void ip6_stats(u_long, const char *, int, int); 1251eaf0ac3Slogwang void ip6_ifstats(char *); 1261eaf0ac3Slogwang void icmp6_stats(u_long, const char *, int, int); 1271eaf0ac3Slogwang void icmp6_ifstats(char *); 1281eaf0ac3Slogwang void pim6_stats(u_long, const char *, int, int); 1291eaf0ac3Slogwang void rip6_stats(u_long, const char *, int, int); 1301eaf0ac3Slogwang void mroute6pr(void); 1311eaf0ac3Slogwang void mrt6_stats(void); 1321eaf0ac3Slogwang 1331eaf0ac3Slogwang struct sockaddr_in6; 1341eaf0ac3Slogwang struct in6_addr; 1351eaf0ac3Slogwang void in6_fillscopeid(struct sockaddr_in6 *); 1361eaf0ac3Slogwang void inet6print(const char *, struct in6_addr *, int, const char *, int); 1371eaf0ac3Slogwang #endif /*INET6*/ 1381eaf0ac3Slogwang 1391eaf0ac3Slogwang #ifdef IPSEC 1401eaf0ac3Slogwang void pfkey_stats(u_long, const char *, int, int); 1411eaf0ac3Slogwang #endif 1421eaf0ac3Slogwang 1431eaf0ac3Slogwang void mbpr(void *, u_long); 1441eaf0ac3Slogwang 1451eaf0ac3Slogwang void netisr_stats(void); 1461eaf0ac3Slogwang 1471eaf0ac3Slogwang void hostpr(u_long, u_long); 1481eaf0ac3Slogwang void impstats(u_long, u_long); 1491eaf0ac3Slogwang 1501eaf0ac3Slogwang void intpr(void (*)(char *), int); 1511eaf0ac3Slogwang 1521eaf0ac3Slogwang void pr_family(int); 1531eaf0ac3Slogwang void rt_stats(void); 1541eaf0ac3Slogwang 1551eaf0ac3Slogwang char *routename(struct sockaddr *, int); 1561eaf0ac3Slogwang const char *netname(struct sockaddr *, struct sockaddr *); 1571eaf0ac3Slogwang void routepr(int, int); 15822ce4affSfengbojiang int p_sockaddr(const char *name, struct sockaddr *sa, 15922ce4affSfengbojiang struct sockaddr *mask, int flags, int width); 16022ce4affSfengbojiang const char *fmt_sockaddr(struct sockaddr *sa, struct sockaddr *mask, 16122ce4affSfengbojiang int flags); 1621eaf0ac3Slogwang 1631eaf0ac3Slogwang #ifdef NETGRAPH 1641eaf0ac3Slogwang void netgraphprotopr(u_long, const char *, int, int); 1651eaf0ac3Slogwang #endif 1661eaf0ac3Slogwang 1671eaf0ac3Slogwang void unixpr(u_long, u_long, u_long, u_long, u_long, bool *); 1681eaf0ac3Slogwang 1691eaf0ac3Slogwang void mroutepr(void); 1701eaf0ac3Slogwang void mrt_stats(void); 1711eaf0ac3Slogwang void bpf_stats(char *); 17222ce4affSfengbojiang void nhops_print(int fibnum, int af); 17322ce4affSfengbojiang void nhgrp_print(int fibnum, int af); 174