En una máquina Squeeze, confíe en /proc/net/dev
. Es una forma más directa y confiable de ver los mismos datos.
Para el caso particular del conteo perdido, no puedo explicar el problema exacto, pero puedo observarlo en otras cajas Squeeze. Si me importara, lo informaría como un error a Debian (y sugeriría que alguien lo haga y lo informe aquí).
Ambos toman el número del tx_dropped
campo de net_device_stats
. En /proc/net/dev
, la línea es generada por dev_seq_printf_stats
desde net/core/dev.c
.
ip
va, como siempre, a través de netlink, y más precisamente para las estadísticas de dispositivos de red, rtnetlink. La estructura pasó al espacio de usuario, rtnl_link_stats
.
La estructura nativa usa unsigned long
s, rtnetlink
usa __u32
, se realiza una conversión más o menos implícita en copy_rtnl_link_stats
.
Es bastante fácil darse cuenta de que la versión de 32 bits se está utilizando desde el principio de la estructura, rx_packets:while /proc/net/dev
muestra 1258629839430, ip
muestra 244248462, que corresponde aproximadamente a los últimos 32 bits (más algunos bytes más entre comandos); lo mismo con el conteo de paquetes.
Aquí está el procesamiento de números para esos 2 primeros campos:
% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484
3955068450
3955476484
Las cosas mejoraron con la introducción de IFLA_STATS64
:
- en el kernel (del compromiso 10708f37ae729baba9b67bd134c3720709d4ae62, disponible en sentido ascendente en v2.6.35 y posteriores)
- en iproute2 (de la confirmación 8864ac9dc5bd5ce049280337deb21191673a02d0, disponible en sentido ascendente en v2.6.33-36 y posteriores).