* Copyright (c) 1983 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
static char sccsid
[] = "@(#)if.c 5.3 (Berkeley) 4/23/86";
#include <netinet/in_var.h>
extern char *routename(), *netname();
* Print a description of the network interfaces.
intpr(interval
, ifnetaddr
)
printf("ifnet: symbol not defined\n");
sidewaysintpr(interval
, ifnetaddr
);
klseek(kmem
, ifnetaddr
, 0);
read(kmem
, &ifnetaddr
, sizeof ifnetaddr
);
printf("%-5.5s %-5.5s %-10.10s %-12.12s %-7.7s %-5.5s %-7.7s %-5.5s",
"Name", "Mtu", "Network", "Address", "Ipkts", "Ierrs",
printf(" %-6.6s", "Collis");
printf(" %-6.6s", "Timer");
while (ifnetaddr
|| ifaddraddr
) {
struct in_addr in
, inet_makeaddr();
klseek(kmem
, ifnetaddr
, 0);
read(kmem
, &ifnet
, sizeof ifnet
);
klseek(kmem
, (off_t
)ifnet
.if_name
, 0);
ifnetaddr
= (off_t
) ifnet
.if_next
;
(strcmp(name
, interface
) != 0 || unit
!= ifnet
.if_unit
))
*cp
++ = ifnet
.if_unit
+ '0';
if ((ifnet
.if_flags
&IFF_UP
) == 0)
ifaddraddr
= (off_t
)ifnet
.if_addrlist
;
printf("%-5.5s %-5d ", name
, ifnet
.if_mtu
);
printf("%-10.10s ", "none");
printf("%-12.12s ", "none");
klseek(kmem
, ifaddraddr
, 0);
read(kmem
, &ifaddr
, sizeof ifaddr
);
ifaddraddr
= (off_t
)ifaddr
.ifa
.ifa_next
;
switch (ifaddr
.ifa
.ifa_addr
.sa_family
) {
printf("%-10.10s ", "none");
printf("%-12.12s ", "none");
sin
= (struct sockaddr_in
*)&ifaddr
.in
.ia_addr
;
/* can't use inet_makeaddr because kernel
in
= inet_makeaddr(ifaddr
.in
.ia_subnet
,
printf("%-10.10s ", netname(in
));
netname(htonl(ifaddr
.in
.ia_subnet
),
ifaddr
.in
.ia_subnetmask
));
printf("%-12.12s ", routename(sin
->sin_addr
));
struct sockaddr_ns
*sns
=
(struct sockaddr_ns
*)&ifaddr
.in
.ia_addr
;
*(union ns_net
*) &net
= sns
->sns_addr
.x_net
;
sprintf(host
, "%lxH", ntohl(net
));
printf("ns:%-8s ", host
);
printf("%-12s ",ns_phost(sns
));
printf("af%2d: ", ifaddr
.ifa
.ifa_addr
.sa_family
);
for (cp
= (char *)&ifaddr
.ifa
.ifa_addr
+
sizeof(struct sockaddr
) - 1;
cp
>= ifaddr
.ifa
.ifa_addr
.sa_data
; --cp
)
n
= cp
- (char *)ifaddr
.ifa
.ifa_addr
.sa_data
+ 1;
cp
= (char *)ifaddr
.ifa
.ifa_addr
.sa_data
;
printf("%02d.", *cp
++ & 0xff);
printf("%02d", *cp
++ & 0xff);
printf("%02d ", *cp
& 0xff);
printf("%-7d %-5d %-7d %-5d %-6d",
ifnet
.if_ipackets
, ifnet
.if_ierrors
,
ifnet
.if_opackets
, ifnet
.if_oerrors
,
printf(" %-6d", ifnet
.if_timer
);
char ift_name
[16]; /* interface name */
int ift_ip
; /* input packets */
int ift_ie
; /* input errors */
int ift_op
; /* output packets */
int ift_oe
; /* output errors */
int ift_co
; /* collisions */
* Print a running summary of interface statistics.
* Repeat display every interval seconds, showing
* statistics collected over that interval. First
* line printed at top of screen is always cumulative.
sidewaysintpr(interval
, off
)
register struct iftot
*ip
, *total
;
struct iftot
*lastif
, *sum
, *interesting
;
read(kmem
, &firstifnet
, sizeof (off_t
));
for (off
= firstifnet
, ip
= iftot
; off
;) {
read(kmem
, &ifnet
, sizeof ifnet
);
klseek(kmem
, (int)ifnet
.if_name
, 0);
read(kmem
, ip
->ift_name
+ 1, 15);
if (interface
&& strcmp(ip
->ift_name
+ 1, interface
) == 0 &&
cp
= index(ip
->ift_name
, '\0');
sprintf(cp
, "%d)", ifnet
.if_unit
);
if (ip
>= iftot
+ MAXIF
- 2)
off
= (off_t
) ifnet
.if_next
;
printf(" input %-6.6s output ", interesting
->ift_name
);
printf(" input (Total) output ");
for (ip
= iftot
; ip
< iftot
+ MAXIF
; ip
++) {
printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ",
"packets", "errs", "packets", "errs", "colls");
printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ",
"packets", "errs", "packets", "errs", "colls");
for (off
= firstifnet
, ip
= iftot
; off
&& ip
< lastif
; ip
++) {
read(kmem
, &ifnet
, sizeof ifnet
);
printf("%-7d %-5d %-7d %-5d %-5d ",
ifnet
.if_ipackets
- ip
->ift_ip
,
ifnet
.if_ierrors
- ip
->ift_ie
,
ifnet
.if_opackets
- ip
->ift_op
,
ifnet
.if_oerrors
- ip
->ift_oe
,
ifnet
.if_collisions
- ip
->ift_co
);
ip
->ift_ip
= ifnet
.if_ipackets
;
ip
->ift_ie
= ifnet
.if_ierrors
;
ip
->ift_op
= ifnet
.if_opackets
;
ip
->ift_oe
= ifnet
.if_oerrors
;
ip
->ift_co
= ifnet
.if_collisions
;
sum
->ift_ip
+= ip
->ift_ip
;
sum
->ift_ie
+= ip
->ift_ie
;
sum
->ift_op
+= ip
->ift_op
;
sum
->ift_oe
+= ip
->ift_oe
;
sum
->ift_co
+= ip
->ift_co
;
off
= (off_t
) ifnet
.if_next
;
printf("%-7d %-5d %-7d %-5d %-5d\n",
sum
->ift_ip
- total
->ift_ip
,
sum
->ift_ie
- total
->ift_ie
,
sum
->ift_op
- total
->ift_op
,
sum
->ift_oe
- total
->ift_oe
,
sum
->ift_co
- total
->ift_co
);