Date: Wed, 27 Nov 1996 09:00:28 -0600 (CST) From: Joe Greco <jgreco@brasil.moneng.mei.com> To: narvi@haldjas.folklore.ee (Narvi) Cc: freebsd-hackers@freebsd.org Subject: Re: Netstat broken or two many bytes? Message-ID: <199611271500.JAA19115@brasil.moneng.mei.com> In-Reply-To: <Pine.BSF.3.95.961127132034.2468C-100000@haldjas.folklore.ee> from "Narvi" at Nov 27, 96 01:25:18 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> So is the statistics broken (this is 2.1.5-RELEASE) or is something else
> amiss in my computer? I really don't like these negative inbytes...
There is nothing wrong, you are seeing an overflow :-)
> And it has been up for only about a month (uptime 29 days + something). If
> it is just the statistics, could we make the wrap-around value bigger (use
> 64 bity numbers for example)?
>
> Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll
> ed0 1500 <Link>00.c0.6c.55.50.00 12844801 577 -1765725048 19673776 0 1959771210 5908886
> ed0 1500 172.17.1/24 localhost 12844801 577 -1765725048 19673776 0 1959771210 5908886
> lp0* 1500 <Link> 0 0 0 0 0 0 0
> lo0 16384 <Link> 130938 0 8103328 130938 0 8103328 0
> lo0 16384 your-net localhost 130938 0 8103328 130938 0 8103328 0
> sl0* 552 <Link> 0 0 0 0 0 0 0
> tun0* 1500 <Link> 0 0 0 0 0 0 0
I routinely see this, many of my interfaces see 5Mpkts/day.
"UTSL!"
The printf()'s in netstat/if.c +204 are signed:
printf("%8d %5d ",
ifnet.if_ipackets, ifnet.if_ierrors);
if (bflag)
printf("%10d ", ifnet.if_ibytes);
printf("%8d %5d ",
ifnet.if_opackets, ifnet.if_oerrors);
if (bflag)
printf("%10d ", ifnet.if_obytes);
printf("%5d", ifnet.if_collisions);
This is contrary to the definition of ifnet, sys/net/if.h +111, where the
variables are declared u_long:
u_long ifi_ipackets; /* packets received on interface */
u_long ifi_ierrors; /* input errors on interface */
u_long ifi_opackets; /* packets sent on interface */
u_long ifi_oerrors; /* output errors on interface */
u_long ifi_collisions; /* collisions on csma interfaces */
u_long ifi_ibytes; /* total number of octets received */
u_long ifi_obytes; /* total number of octets sent */
It may certainly be reasonable to correct netstat... unless (unlikely)
the negative sign is intentional to let you know an overflow condition is
near (someone doing before/after automated testing could check for a sign
change, which would happen twice as often as an overflow) but I think that
would be dense.
I do not know if it is a good idea to change these to quad_t (is there
such a thing as a u_quad_t?). There would surely be at least a small
performance penalty.
On the other hand, it would be cool to say "Yeah, in the last 200 days,
this machine has routed 1.2 terabytes of data without a crash, here's
the 'netstat -i -b' to prove it" :-)
... JG
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611271500.JAA19115>
