Date: Sat, 31 Jul 1999 10:52:09 -0400 (EDT) From: Benjamin April <ben@destek.net> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/12898: netstat -c Message-ID: <199907311452.KAA32545@Darkside.stagecraft.net>
index | next in thread | raw e-mail
>Number: 12898
>Category: bin
>Synopsis: Added a command-line switch to netstat to output the number of routes in the routing table.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Jul 31 08:00:01 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator: Ben April
>Release: FreeBSD 3.1-RELEASE i386
>Organization:
The Destek Group, Inc.
>Environment:
This has been tested on 3.1-RELEASE and 3.2-RELEASE running
gated.
>Description:
Basicly runnign netstat -c is a faster version of
netstat -rn|wc. -c follows about the same code path as
-rn does but -c only outputs the total number of routes
in each type(IP/appletak ect...)
>How-To-Repeat:
N/A
>Fix:
*** main.c Sun Jul 25 22:02:16 1999
--- ./main.c.old Sat Jul 24 12:12:53 1999
***************
*** 221,227 ****
af = AF_UNSPEC;
! while ((ch = getopt(argc, argv, "Aabcdf:ghI:iM:mN:np:rstuw:")) != -1)
switch(ch) {
case 'A':
Aflag = 1;
--- 221,227 ----
af = AF_UNSPEC;
! while ((ch = getopt(argc, argv, "Aabdf:ghI:iM:mN:np:rstuw:")) != -1)
switch(ch) {
case 'A':
Aflag = 1;
***************
*** 232,241 ****
case 'b':
bflag = 1;
break;
- case 'c':
- cflag = 1;
- nflag = 1;
- break;
case 'd':
dflag = 1;
break;
--- 232,237 ----
***************
*** 381,391 ****
intpr(interval, nl[N_IFNET].n_value);
exit(0);
}
- if (cflag) {
- kread(0, 0, 0);
- routecount(nl[N_RTREE].n_value);
- exit(0);
- }
if (rflag) {
kread(0, 0, 0);
if (sflag)
--- 377,382 ----
***************
*** 571,582 ****
static void
usage()
{
! (void)fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
"usage: netstat [-Aan] [-f address_family] [-M core] [-N system]",
" netstat [-bdghimnrs] [-f address_family] [-M core] [-N system]",
" netstat [-bdn] [-I interface] [-M core] [-N system] [-w wait]",
! " netstat [-M core] [-N system] [-p protocol]",
! " netstat [-c]");
exit(1);
}
--- 562,572 ----
static void
usage()
{
! (void)fprintf(stderr, "%s\n%s\n%s\n%s\n",
"usage: netstat [-Aan] [-f address_family] [-M core] [-N system]",
" netstat [-bdghimnrs] [-f address_family] [-M core] [-N system]",
" netstat [-bdn] [-I interface] [-M core] [-N system] [-w wait]",
! " netstat [-M core] [-N system] [-p protocol]");
exit(1);
}
*** netstat.1 Mon Jul 26 07:52:39 1999
--- ./netstat.1.old Sat Jul 24 13:21:41 1999
***************
*** 58,65 ****
.Op Fl p Ar protocol
.Op Fl M Ar core
.Op Fl N Ar system
- .Nm netstat
- .Op Fl c
.Sh DESCRIPTION
The
.Nm netstat
--- 58,63 ----
***************
*** 94,107 ****
.Fl i
, as described below),
show the number of bytes in and out.
- .It Fl c
- prints the number of routes in the kernel table to stdout.
- A faster equivlant to
- .Nm netstat
- .Fl rn
- |
- .Nm wc
- .Fl l
.It Fl d
With either interface display (option
.Fl i
--- 92,97 ----
*** route.c Sat Jul 24 14:16:41 1999
--- ./route.c.old Sat Jul 24 12:10:49 1999
***************
*** 114,131 ****
struct radix_node_head *rt_tables[AF_MAX+1];
int NewTree = 0;
- int total = 0;
static struct sockaddr *kgetsa __P((struct sockaddr *));
static void p_tree __P((struct radix_node *));
- static void c_tree __P((struct radix_node *));
static void p_rtnode __P((void));
static void ntreestuff __P((void));
static void np_rtentry __P((struct rt_msghdr *));
static void p_sockaddr __P((struct sockaddr *, struct sockaddr *, int, int));
static void p_flags __P((int, char *));
static void p_rtentry __P((struct rtentry *));
- static void c_rtentry __P((struct rtentry *));
static u_long forgemask __P((u_long));
static void domask __P((char *, u_long, u_long));
--- 114,128 ----
***************
*** 880,968 ****
*p += ('A' - 'a');
break;
}
- }
-
- void
- routecount(rtree)
- u_long rtree;
- {
- struct radix_node_head *rnh, head;
- int i;
-
- printf("Routing tables\n");
-
- if (Aflag == 0 && NewTree)
- ntreestuff();
- else {
- if (rtree == 0) {
- printf("rt_tables: symbol not in namelist\n");
- return;
- }
-
- kget(rtree, rt_tables);
- for (i = 0; i <= AF_MAX; i++) {
- if ((rnh = rt_tables[i]) == 0)
- continue;
- kget(rnh, head);
- if (i == AF_UNSPEC) {
- if (Aflag && af == 0) {
- printf("Netmasks:\n");
- c_tree(head.rnh_treetop);
- }
- } else if (af == AF_UNSPEC || af == i) {
- pr_family(i);
- do_rtent = 1;
- total=0;
- c_tree(head.rnh_treetop);
- printf("%d Routes\n",total);
- }
- }
- }
- }
-
- static void
- c_tree(rn)
- struct radix_node *rn;
- {
-
- again:
- kget(rn, rnode);
- if (rnode.rn_b < 0) {
- if (Aflag)
- printf("%-8.8lx ", (u_long)rn);
- if (rnode.rn_flags & RNF_ROOT) {
- if (Aflag)
- printf("(root node)%s",
- rnode.rn_dupedkey ? " =>\n" : "\n");
- } else if (do_rtent) {
- kget(rn, rtentry);
- c_rtentry(&rtentry);
- if (Aflag)
- p_rtnode();
- } else {
- p_sockaddr(kgetsa((struct sockaddr *)rnode.rn_key),
- NULL, 0, 44);
- putchar('\n');
- }
- if ((rn = rnode.rn_dupedkey))
- goto again;
- } else {
- if (Aflag && do_rtent) {
- printf("%-8.8lx ", (u_long)rn);
- p_rtnode();
- }
- rn = rnode.rn_r;
- c_tree(rnode.rn_l);
- c_tree(rn);
- }
- }
-
-
- static void
- c_rtentry(rt)
- register struct rtentry *rt;
- {
- if (!(rt->rt_parent && !aflag)) {
- ++total;
- }
}
--- 877,880 ----
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907311452.KAA32545>
