Sur une machine Squeeze, faites confiance à /proc/net/dev
. C'est une façon plus simple et plus fiable d'examiner les mêmes données.
Pour le cas particulier du compte abandonné, je ne peux pas expliquer le problème exact, mais je peux l'observer sur d'autres boîtes Squeeze. Si je m'en souciais, je le signalerais comme un bogue à Debian (et suggérerais que quelqu'un le fasse et le rapporte ici).
Les deux prennent le numéro du tx_dropped
champ de net_device_stats
. En /proc/net/dev
, la ligne est générée par dev_seq_printf_stats
à partir de net/core/dev.c
.
ip
passe, comme d'habitude, par netlink, et plus précisément pour les statistiques des périphériques réseau, rtnetlink. La structure transmise à l'espace utilisateur, rtnl_link_stats
.
La structure native utilise unsigned long
s, rtnetlink
utilise __u32
, une conversion plus ou moins implicite se fait en copy_rtnl_link_stats
.
Il est assez facile de comprendre que la version 32 bits est utilisée depuis le début de la structure, rx_packets :tandis que /proc/net/dev
affiche 1258629839430, ip
affiche 244248462, ce qui correspond approximativement aux 32 derniers bits (plus quelques octets supplémentaires entre les commandes) ; même chose avec le nombre de paquets.
Voici le calcul des chiffres pour ces 2 premiers champs :
% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484
3955068450
3955476484
Les choses se sont améliorées avec l'introduction de IFLA_STATS64
:
- dans le noyau (à partir du commit 10708f37ae729baba9b67bd134c3720709d4ae62, disponible en amont dans la v2.6.35 et les versions ultérieures)
- dans iproute2 (du commit 8864ac9dc5bd5ce049280337deb21191673a02d0, disponible en amont dans v2.6.33-36 et versions ultérieures).