* Copyright (c) 1983, 1988 Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)if.c 5.15 (Berkeley) %G%";
#include <netinet/in_var.h>
#include <netiso/iso_var.h>
extern char *routename(), *netname(), *ns_phost();
* Print a description of the network interfaces.
intpr(interval
, ifnetaddr
)
printf("ifnet: symbol not defined\n");
sidewaysintpr((unsigned)interval
, ifnetaddr
);
kvm_read(ifnetaddr
, (char *)&ifnetaddr
, sizeof ifnetaddr
);
printf("%-5.5s %-5.5s %-11.11s %-15.15s %8.8s %5.5s %8.8s %5.5s",
"Name", "Mtu", "Network", "Address", "Ipkts", "Ierrs",
while (ifnetaddr
|| ifaddraddr
) {
struct in_addr
inet_makeaddr();
kvm_read(ifnetaddr
, (char *)&ifnet
, sizeof ifnet
);
kvm_read((off_t
)ifnet
.if_name
, name
, 16);
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("%-11.11s ", "none");
printf("%-15.15s ", "none");
kvm_read(ifaddraddr
, (char *)&ifaddr
, sizeof ifaddr
);
#define CP(x) ((char *)(x))
cp
= (CP(ifaddr
.ifa
.ifa_addr
) - CP(ifaddraddr
)) +
CP(&ifaddr
); sa
= (struct sockaddr
*)cp
;
printf("%-11.11s ", "none");
printf("%-15.15s ", "none");
sin
= (struct sockaddr_in
*)sa
;
/* can't use inet_makeaddr because kernel
in
= inet_makeaddr(ifaddr
.in
.ia_subnet
,
printf("%-11.11s ", netname(in
));
netname(htonl(ifaddr
.in
.ia_subnet
),
ifaddr
.in
.ia_subnetmask
));
printf("%-15.15s ", routename(sin
->sin_addr
));
struct sockaddr_ns
*sns
=
(struct sockaddr_ns
*)sa
;
*(union ns_net
*) &net
= sns
->sns_addr
.x_net
;
sprintf(netnum
, "%lxH", ntohl(net
));
printf("ns:%-8s ", netnum
);
printf("%-15s ", ns_phost(sns
));
struct sockaddr_dl
*sdl
=
(struct sockaddr_dl
*)sa
;
cp
= (char *)LLADDR(sdl
);
m
= printf("(%d)", sa
->sa_family
);
for (cp
= sa
->sa_len
+ (char *)sa
;
--cp
> sa
->sa_data
&& (*cp
== 0);) {}
n
= cp
- sa
->sa_data
+ 1;
m
+= printf("%x%c", *cp
++ & 0xff,
ifaddraddr
= (off_t
)ifaddr
.ifa
.ifa_next
;
printf("%8d %5d %8d %5d %5d",
ifnet
.if_ipackets
, ifnet
.if_ierrors
,
ifnet
.if_opackets
, ifnet
.if_oerrors
,
printf(" %3d", ifnet
.if_timer
);
printf(" %3d", ifnet
.if_snd
.ifq_drops
);
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 */
u_char signalled
; /* set if alarm goes off "early" */
* Print a running summary of interface statistics.
* Repeat display every interval seconds, showing statistics
* collected over that interval. Assumes that interval is non-zero.
* First line printed at top of screen is always cumulative.
sidewaysintpr(interval
, off
)
register struct iftot
*ip
, *total
;
struct iftot
*lastif
, *sum
, *interesting
;
kvm_read(off
, (char *)&firstifnet
, sizeof (off_t
));
for (off
= firstifnet
, ip
= iftot
; off
;) {
kvm_read(off
, (char *)&ifnet
, sizeof ifnet
);
kvm_read((off_t
)ifnet
.if_name
, 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
;
(void)signal(SIGALRM
, catchalarm
);
printf(" input %-6.6s output ", interesting
->ift_name
);
if (lastif
- iftot
> 0) {
printf(" input (Total) output");
for (ip
= iftot
; ip
< iftot
+ MAXIF
; ip
++) {
printf("%8.8s %5.5s %8.8s %5.5s %5.5s ",
"packets", "errs", "packets", "errs", "colls");
printf("%5.5s ", "drops");
printf(" %8.8s %5.5s %8.8s %5.5s %5.5s",
"packets", "errs", "packets", "errs", "colls");
printf(" %5.5s", "drops");
for (off
= firstifnet
, ip
= iftot
; off
&& ip
< lastif
; ip
++) {
kvm_read(off
, (char *)&ifnet
, sizeof ifnet
);
printf("%8d %5d %8d %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
);
ifnet
.if_snd
.ifq_drops
- ip
->ift_dr
);
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
;
ip
->ift_dr
= ifnet
.if_snd
.ifq_drops
;
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
;
sum
->ift_dr
+= ip
->ift_dr
;
off
= (off_t
) ifnet
.if_next
;
if (lastif
- iftot
> 0) {
printf(" %8d %5d %8d %5d %5d",
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
);
printf(" %5d", sum
->ift_dr
- total
->ift_dr
);
oldmask
= sigblock(sigmask(SIGALRM
));
* Called if an interval expires before sidewaysintpr has completed a loop.
* Sets a flag to not wait for the alarm.