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.
structnet_device_stats*snull_stats(structnet_device*dev) { structsnull_priv*priv=(structsnull_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.
Diese Felder enthalten die Gesamtzahl der erfolgreich eingegangenen respektive übertragenen Pakete dieser Schnittstelle.
Die Anzahl der von der Schnittstelle empfangenen und übertragenen Bytes. Diese Felder kamen mit dem 2.2-Kernel hinzu.
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.
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.
Die Anzahl der Kollisionen aufgrund von Überlastung des Mediums.
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.