Statistische Informationen

Die letzte Methode, die ein Treiber benötigt, ist get_stats. Diese Methode gibt einen Zeiger auf Statistik-Daten über das Gerät zurück. Die Implementation ist ziemlich einfach; die hier gezeigte Implementation funktioniert selbst dann, wenn mehrere Schnittstellen von einem Treiber verwaltet werden, weil die Statistiken in der Geräte-Datenstruktur stecken.


 
struct net_device_stats *snull_stats(struct net_device *dev)
{
    struct snull_priv *priv = (struct snull_priv *)dev->priv;
    return &priv->stats;
}

Die eigentliche Arbeit, aussagekräftige Statistiken zurückzuliefern, ist über den ganzen Treiber verteilt und an den Stellen zu finden, wo die diversen Felder aktualisiert werden. Die folgende Liste enthält die interessantesten Felder in struct net_device_stats.

unsigned long rx_packets;, unsigned long tx_packets;

Diese Felder enthalten die Gesamtzahl der erfolgreich eingegangenen respektive übertragenen Pakete dieser Schnittstelle.

unsigned long rx_bytes;, unsigned long tx_bytes;

Die Anzahl der von der Schnittstelle empfangenen und übertragenen Bytes. Diese Felder kamen mit dem 2.2-Kernel hinzu.

unsigned long rx_errors;, unsigned long tx_errors;

Die Anzahl der fehlerhaften Empfangsvorgänge und Übertragungen. Es gibt eine Unmenge von Dingen, die bei der Übertragung von Paketen schiefgehen können; die Struktur net_device_stats enthält sechs Zähler für bestimmte Empfangsfehler und fünf für Sendefehler. In <linux/netdevice.h> finden Sie die vollständige Liste. Wenn möglich sollte Ihr Treiber detaillierte Fehlerstatistiken pflegen, weil diese für Systemadministratoren bei der Problemsuche sehr hilfreich sein können.

unsigned long rx_dropped;, unsigned long tx_dropped;

Die Anzahl der Pakete, die während des Empfangs oder der Übertragung verworfen worden sind. Pakete werden verworfen, wenn für die Paketdaten kein Speicher mehr zur Verfügung steht. tx_dropped wird selten verwendet.

unsigned long collisions;

Die Anzahl der Kollisionen aufgrund von Überlastung des Mediums.

unsigned long multicast;

Die Anzahl empfangener Multicast-Pakete.

Es soll hier noch einmal wiederholt werden, daß die Methode get_stats zu beliebigen Zeitpunkten aufgerufen werden kann — auch wenn die Schnittstelle nicht in Betrieb ist —, so daß der Treiber auch nach dem Ausführen der stop-Methode die Statistikinformationen vorhalten sollte.