Update to match kernel changes.

This commit is contained in:
mycroft 1995-06-12 03:03:07 +00:00
parent 4cabe662ac
commit 81c2958581
5 changed files with 149 additions and 103 deletions

View File

@ -33,7 +33,7 @@
#ifndef lint
/*static char sccsid[] = "from: @(#)if.c 8.2 (Berkeley) 2/21/94";*/
static char *rcsid = "$Id: if.c,v 1.9 1994/09/17 00:14:20 mycroft Exp $";
static char *rcsid = "$Id: if.c,v 1.10 1995/06/12 03:03:07 mycroft Exp $";
#endif /* not lint */
#include <sys/types.h>
@ -112,16 +112,16 @@ intpr(interval, ifnetaddr)
kread((u_long)ifnet.if_name, name, 16))
return;
name[15] = '\0';
ifnetaddr = (u_long)ifnet.if_next;
ifnetaddr = (u_long)ifnet.if_list.tqe_next;
if (interface != 0 && (strcmp(name, interface) != 0 ||
unit != ifnet.if_unit))
continue;
cp = index(name, '\0');
cp += sprintf(cp, "%d", ifnet.if_unit);
if ((ifnet.if_flags&IFF_UP) == 0)
if ((ifnet.if_flags & IFF_UP) == 0)
*cp++ = '*';
*cp = '\0';
ifaddraddr = (u_long)ifnet.if_addrlist;
ifaddraddr = (u_long)ifnet.if_addrlist.tqh_first;
}
printf("%-5.5s %-5d ", name, ifnet.if_mtu);
if (ifaddraddr == 0) {
@ -157,6 +157,20 @@ intpr(interval, ifnetaddr)
#endif
printf("%-15.15s ",
routename(sin->sin_addr.s_addr));
if (aflag) {
u_long multiaddr;
struct in_multi inm;
multiaddr = (u_long)ifaddr.in.ia_multiaddrs.lh_first;
while (multiaddr != 0) {
kread(multiaddr, (char *)&inm,
sizeof inm);
printf("\n%23s %-15.15s ", "",
routename(inm.inm_addr.s_addr));
multiaddr = (u_long)inm.inm_list.le_next;
}
}
break;
case AF_NS:
{
@ -197,7 +211,7 @@ intpr(interval, ifnetaddr)
putchar(' ');
break;
}
ifaddraddr = (u_long)ifaddr.ifa.ifa_next;
ifaddraddr = (u_long)ifaddr.ifa.ifa_list.tqe_next;
}
printf("%8d %5d %8d %5d %5d",
ifnet.if_ipackets, ifnet.if_ierrors,
@ -265,7 +279,7 @@ sidewaysintpr(interval, off)
ip++;
if (ip >= iftot + MAXIF - 2)
break;
off = (u_long) ifnet.if_next;
off = (u_long)ifnet.if_list.tqe_next;
}
lastif = ip;
@ -335,7 +349,7 @@ loop:
sum->ift_oe += ip->ift_oe;
sum->ift_co += ip->ift_co;
sum->ift_dr += ip->ift_dr;
off = (u_long) ifnet.if_next;
off = (u_long)ifnet.if_list.tqe_next;
}
if (lastif - iftot > 0) {
printf(" %8d %5d %8d %5d %5d",

View File

@ -33,7 +33,7 @@
#ifndef lint
/*static char sccsid[] = "from: @(#)inet.c 8.4 (Berkeley) 4/20/94";*/
static char *rcsid = "$Id: inet.c,v 1.11 1995/05/14 08:20:16 cgd Exp $";
static char *rcsid = "$Id: inet.c,v 1.12 1995/06/12 03:03:10 mycroft Exp $";
#endif /* not lint */
#include <sys/param.h>
@ -88,31 +88,27 @@ protopr(off, name)
u_long off;
char *name;
{
struct inpcb cb;
register struct inpcb *prev, *next;
struct inpcbtable table;
register struct inpcb *next, **prev;
int istcp;
static int first = 1;
if (off == 0)
return;
istcp = strcmp(name, "tcp") == 0;
kread(off, (char *)&cb, sizeof (struct inpcb));
inpcb = cb;
prev = (struct inpcb *)off;
if (inpcb.inp_next == (struct inpcb *)off)
return;
while (inpcb.inp_next != (struct inpcb *)off) {
next = inpcb.inp_next;
kread((u_long)next, (char *)&inpcb, sizeof (inpcb));
if (inpcb.inp_prev != prev) {
kread(off, (char *)&table, sizeof table);
prev = &((struct inpcbtable *)off)->inpt_list.lh_first;
while (inpcb.inp_list.le_next != 0) {
next = inpcb.inp_list.le_next;
kread((u_long)next, (char *)&inpcb, sizeof inpcb);
if (inpcb.inp_list.le_prev != prev) {
printf("???\n");
break;
}
prev = &next->inp_list.le_next;
if (!aflag &&
inet_lnaof(inpcb.inp_laddr) == INADDR_ANY) {
prev = next;
inet_lnaof(inpcb.inp_laddr) == INADDR_ANY)
continue;
}
kread((u_long)inpcb.inp_socket, (char *)&sockb, sizeof (sockb));
if (istcp) {
kread((u_long)inpcb.inp_ppcb,
@ -148,7 +144,6 @@ protopr(off, name)
printf(" %s", tcpstates[tcpcb.t_state]);
}
putchar('\n');
prev = next;
}
}

View File

@ -39,7 +39,7 @@ char copyright[] =
#ifndef lint
/*static char sccsid[] = "from: @(#)main.c 8.4 (Berkeley) 3/1/94";*/
static char *rcsid = "$Id: main.c,v 1.6 1994/05/13 08:08:14 mycroft Exp $";
static char *rcsid = "$Id: main.c,v 1.7 1995/06/12 03:03:11 mycroft Exp $";
#endif /* not lint */
#include <sys/param.h>
@ -67,12 +67,12 @@ struct nlist nl[] = {
{ "_mbstat" },
#define N_IPSTAT 1
{ "_ipstat" },
#define N_TCB 2
{ "_tcb" },
#define N_TCBTABLE 2
{ "_tcbtable" },
#define N_TCPSTAT 3
{ "_tcpstat" },
#define N_UDB 4
{ "_udb" },
#define N_UDBTABLE 4
{ "_udbtable" },
#define N_UDPSTAT 5
{ "_udpstat" },
#define N_IFNET 6
@ -121,9 +121,11 @@ struct nlist nl[] = {
{ "_ip_mrtproto" },
#define N_MRTSTAT 28
{ "_mrtstat" },
#define N_MRTTABLE 29
{ "_mrttable" },
#define N_VIFTABLE 30
#define N_MFCHASHTBL 29
{ "_mfchashtbl" },
#define N_MFCHASH 30
{ "_mfchash" },
#define N_VIFTABLE 31
{ "_viftable" },
"",
};
@ -136,9 +138,9 @@ struct protox {
void (*pr_stats)(); /* statistics printing routine */
char *pr_name; /* well-known name */
} protox[] = {
{ N_TCB, N_TCPSTAT, 1, protopr,
{ N_TCBTABLE, N_TCPSTAT, 1, protopr,
tcp_stats, "tcp" },
{ N_UDB, N_UDPSTAT, 1, protopr,
{ N_UDBTABLE, N_UDPSTAT, 1, protopr,
udp_stats, "udp" },
{ -1, N_IPSTAT, 1, 0,
ip_stats, "ip" },
@ -361,7 +363,8 @@ main(argc, argv)
nl[N_MRTSTAT].n_value);
else
mroutepr(nl[N_MRTPROTO].n_value,
nl[N_MRTTABLE].n_value,
nl[N_MFCHASHTBL].n_value,
nl[N_MFCHASH].n_value,
nl[N_VIFTABLE].n_value);
exit(0);
}

View File

@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)mroute.c 8.1 (Berkeley) 6/6/93
* $Id: mroute.c,v 1.6 1995/03/28 17:26:42 jtc Exp $
* $Id: mroute.c,v 1.7 1995/06/12 03:03:13 mycroft Exp $
*/
/*
@ -49,6 +49,8 @@
#include <sys/socketvar.h>
#include <sys/protosw.h>
#include <net/if.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/igmp.h>
#define _KERNEL
@ -59,21 +61,44 @@
#include <stdlib.h>
#include "netstat.h"
char *
pktscale(n)
u_long n;
{
static char buf[8];
char t;
if (n < 1024)
t = ' ';
else if (n < 1024 * 1024) {
t = 'k';
n /= 1024;
} else {
t = 'm';
n /= 1048576;
}
sprintf(buf, "%u%c", n, t);
return (buf);
}
void
mroutepr(mrpaddr, mrtaddr, vifaddr)
u_long mrpaddr, mrtaddr, vifaddr;
mroutepr(mrpaddr, mfchashtbladdr, mfchashaddr, vifaddr)
u_long mrpaddr, mfchashtbladdr, mfchashaddr, vifaddr;
{
u_int mrtproto;
struct mrt *mrttable[MRTHASHSIZ];
LIST_HEAD(, mfc) *mfchashtbl;
u_long mfchash;
struct vif viftable[MAXVIFS];
register struct mrt *mrt;
struct mrt smrt;
struct mfc *mfcp, mfc;
register struct vif *v;
register vifi_t vifi;
register struct in_addr *grp;
register int i, n;
register int banner_printed;
register int saved_nflag;
struct in_addr *grp;
int i;
int banner_printed;
int saved_nflag;
int numvifs;
int nmfc; /* No. of cache entries */
if (mrpaddr == 0) {
printf("ip_mrtproto: symbol not in namelist\n");
@ -82,7 +107,6 @@ mroutepr(mrpaddr, mrtaddr, vifaddr)
kread(mrpaddr, (char *)&mrtproto, sizeof(mrtproto));
switch (mrtproto) {
case 0:
printf("no multicast routing compiled into this system\n");
return;
@ -95,8 +119,12 @@ mroutepr(mrpaddr, mrtaddr, vifaddr)
return;
}
if (mrtaddr == 0) {
printf("mrttable: symbol not in namelist\n");
if (mfchashtbladdr == 0) {
printf("mfchashtbl: symbol not in namelist\n");
return;
}
if (mfchashaddr == 0) {
printf("mfchash: symbol not in namelist\n");
return;
}
if (vifaddr == 0) {
@ -109,64 +137,64 @@ mroutepr(mrpaddr, mrtaddr, vifaddr)
kread(vifaddr, (char *)&viftable, sizeof(viftable));
banner_printed = 0;
numvifs = 0;
for (vifi = 0, v = viftable; vifi < MAXVIFS; ++vifi, ++v) {
if (v->v_lcl_addr.s_addr == 0)
continue;
numvifs = vifi;
if (!banner_printed) {
printf("\nVirtual Interface Table\n%s%s",
" Vif Threshold Local-Address ",
"Remote-Address Groups\n");
printf("\nVirtual Interface Table\n %s%s",
"Vif Thresh Limit Local-Address ",
"Remote-Address Pkt_in Pkt_out\n");
banner_printed = 1;
}
printf(" %2u %3u %-15.15s",
vifi, v->v_threshold, routename(v->v_lcl_addr.s_addr));
printf(" %-15.15s\n", (v->v_flags & VIFF_TUNNEL) ?
routename(v->v_rmt_addr.s_addr) : "");
n = v->v_lcl_grps_n;
grp = (struct in_addr *)malloc(n * sizeof(*grp));
if (grp == NULL) {
printf("v_lcl_grps_n: malloc failed\n");
return;
}
kread((u_long)v->v_lcl_grps, (caddr_t)grp, n * sizeof(*grp));
for (i = 0; i < n; ++i)
printf("%51s %-15.15s\n",
"", routename((grp++)->s_addr));
free(grp);
printf(" %3u %3u %5u %-15.15s",
vifi, v->v_threshold, v->v_rate_limit,
routename(v->v_lcl_addr.s_addr));
printf(" %-15.15s %6u %7u\n", (v->v_flags & VIFF_TUNNEL) ?
routename(v->v_rmt_addr.s_addr) : "",
v->v_pkt_in, v->v_pkt_out);
}
if (!banner_printed)
printf("\nVirtual Interface Table is empty\n");
kread(mrtaddr, (char *)&mrttable, sizeof(mrttable));
kread(mfchashtbladdr, (char *)&mfchashtbl, sizeof(mfchashtbl));
kread(mfchashaddr, (char *)&mfchash, sizeof(mfchash));
banner_printed = 0;
for (i = 0; i < MRTHASHSIZ; ++i) {
for (mrt = mrttable[i]; mrt != NULL; mrt = mrt->mrt_next) {
nmfc = 0;
for (i = 0; i <= mfchash; ++i) {
kread((u_long)&mfchashtbl[i], (char *)&mfcp, sizeof(mfcp));
for (; mfcp != 0; mfcp = mfc.mfc_hash.le_next) {
if (!banner_printed) {
printf("\nMulticast Routing Table\n%s",
" Hash Origin-Subnet In-Vif Out-Vifs\n");
printf("\nMulticast Forwarding Cache\n %s%s",
"Hash Origin Mcastgroup ",
"Traffic In-Vif Out-Vifs/Forw-ttl\n");
banner_printed = 1;
}
kread((u_long)mrt, (char *)&smrt, sizeof(*mrt));
mrt = &smrt;
printf(" %3u %-15.15s %2u ",
i, netname(mrt->mrt_origin.s_addr,
ntohl(mrt->mrt_originmask.s_addr)),
mrt->mrt_parent);
for (vifi = 0; vifi < MAXVIFS; ++vifi)
if (VIFM_ISSET(vifi, mrt->mrt_children))
printf(" %u%c",
vifi,
VIFM_ISSET(vifi, mrt->mrt_leaves) ?
'*' : ' ');
kread((u_long)mfcp, (char *)&mfc, sizeof(mfc));
printf(" %3u %-15.15s",
i, routename(mfc.mfc_origin.s_addr));
printf(" %-15.15s %7s %3u ",
routename(mfc.mfc_mcastgrp.s_addr),
pktscale(mfc.mfc_pkt_cnt), mfc.mfc_parent);
for (vifi = 0; vifi <= numvifs; ++vifi)
if (mfc.mfc_ttls[vifi])
printf(" %u/%u", vifi, mfc.mfc_ttls[vifi]);
printf("\n");
nmfc++;
}
}
if (!banner_printed)
printf("\nMulticast Routing Table is empty\n");
printf("\nMulticast Forwarding Cache is empty\n");
else
printf("\nTotal no. of entries in cache: %d\n", nmfc);
printf("\n");
nflag = saved_nflag;
@ -180,21 +208,21 @@ mrt_stats(mrpaddr, mstaddr)
u_int mrtproto;
struct mrtstat mrtstat;
if(mrpaddr == 0) {
if (mrpaddr == 0) {
printf("ip_mrtproto: symbol not in namelist\n");
return;
}
kread(mrpaddr, (char *)&mrtproto, sizeof(mrtproto));
switch (mrtproto) {
case 0:
case 0:
printf("no multicast routing compiled into this system\n");
return;
case IGMP_DVMRP:
case IGMP_DVMRP:
break;
default:
default:
printf("multicast routing protocol %u, unknown\n", mrtproto);
return;
}
@ -206,20 +234,26 @@ mrt_stats(mrpaddr, mstaddr)
kread(mstaddr, (char *)&mrtstat, sizeof(mrtstat));
printf("multicast routing:\n");
printf(" %10u multicast route lookup%s\n",
mrtstat.mrts_mrt_lookups, plural(mrtstat.mrts_mrt_lookups));
printf(" %10u multicast route cache miss%s\n",
mrtstat.mrts_mrt_misses, plurales(mrtstat.mrts_mrt_misses));
printf(" %10u group address lookup%s\n",
mrtstat.mrts_grp_lookups, plural(mrtstat.mrts_grp_lookups));
printf(" %10u group address cache miss%s\n",
mrtstat.mrts_grp_misses, plurales(mrtstat.mrts_grp_misses));
printf(" %10u datagram%s with no route for origin\n",
mrtstat.mrts_no_route, plural(mrtstat.mrts_no_route));
mrtstat.mrts_no_route, plural(mrtstat.mrts_no_route));
printf(" %10u upcall%s made to mrouted\n",
mrtstat.mrts_upcalls, plural(mrtstat.mrts_upcalls));
printf(" %10u datagram%s with malformed tunnel options\n",
mrtstat.mrts_bad_tunnel, plural(mrtstat.mrts_bad_tunnel));
mrtstat.mrts_bad_tunnel, plural(mrtstat.mrts_bad_tunnel));
printf(" %10u datagram%s with no room for tunnel options\n",
mrtstat.mrts_cant_tunnel, plural(mrtstat.mrts_cant_tunnel));
printf(" %10u datagram%s arrived on the wrong interface\n",
mrtstat.mrts_wrong_if, plural(mrtstat.mrts_wrong_if));
mrtstat.mrts_cant_tunnel, plural(mrtstat.mrts_cant_tunnel));
printf(" %10u datagram%s arrived on wrong interface\n",
mrtstat.mrts_wrong_if, plural(mrtstat.mrts_wrong_if));
printf(" %10u datagram%s dropped due to upcall Q overflow\n",
mrtstat.mrts_upq_ovflw, plural(mrtstat.mrts_upq_ovflw));
printf(" %10u datagram%s dropped due to upcall socket overflow\n",
mrtstat.mrts_upq_sockfull, plural(mrtstat.mrts_upq_sockfull));
printf(" %10u datagram%s cleaned up by the cache\n",
mrtstat.mrts_cache_cleanups, plural(mrtstat.mrts_cache_cleanups));
printf(" %10u datagram%s dropped selectively by ratelimiter\n",
mrtstat.mrts_drop_sel, plural(mrtstat.mrts_drop_sel));
printf(" %10u datagram%s dropped - bucket Q overflow\n",
mrtstat.mrts_q_overflow, plural(mrtstat.mrts_q_overflow));
printf(" %10u datagram%s dropped - larger than bkt size\n",
mrtstat.mrts_pkt2large, plural(mrtstat.mrts_pkt2large));
}

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* from: @(#)netstat.h 8.2 (Berkeley) 1/4/94
* $Id: netstat.h,v 1.2 1994/05/13 08:08:20 mycroft Exp $
* $Id: netstat.h,v 1.3 1995/06/12 03:03:14 mycroft Exp $
*/
#include <sys/cdefs.h>
@ -106,5 +106,5 @@ void tp_protopr __P((u_long, char *));
void tp_inproto __P((u_long));
void tp_stats __P((caddr_t, caddr_t));
void mroutepr __P((u_long, u_long, u_long));
void mroutepr __P((u_long, u_long, u_long, u_long));
void mrt_stats __P((u_long, u_long));