Статистическая информация |
Предыдущая Содержание Следующая |
Последним необходимым методом драйвера является get_stats. Этот метод возвращает указатель на статистику для данного устройства. Его реализация довольно проста; показанный метод работает даже когда несколько интерфейсов управляются одним и тем же драйвером, потому что статистика размещена внутри структуры данных устройства.
struct net_device_stats *snull_stats(struct net_device *dev) { struct snull_priv *priv = netdev_priv(dev); return &priv->stats; }
Реальная работа, необходимая для получения достоверной статистики, распределена по всему драйверу, где обновляются различные поля. Ниже приведён список наиболее интересных полей в struct net_device_stats:
unsigned long rx_packets; unsigned long tx_packets; Общее количество входящих и исходящих пакетов, успешно переданных интерфейсом.
unsigned long rx_bytes; unsigned long tx_bytes; Количество байтов, полученных и переданных интерфейсом.
unsigned long rx_errors; unsigned long tx_errors; Количество ошибочных приёмов и передач. Нет конца тому, что может пойти не так при передаче пакета и структура net_device_stats включает в себя шесть счётчиков для специфичных ошибок приёма и пяти ошибок для передачи. Для полного списка смотрите <linux/netdevice.h>. Если возможно, ваш драйвер должен вести подробную статистику ошибок, потому что они могут быть наиболее полезны для системных администраторов, пытающихся обнаружить проблему.
unsigned long rx_dropped; unsigned long tx_dropped; Количество пакетов, отброшенных во время приёма и передачи. Пакеты отбрасываются, если нет памяти, необходимой для данных пакета. tx_dropped используется редко.
unsigned long collisions; Число коллизий из-за перегрузки среды передачи.
unsigned long multicast; Количество принятых многоадресных пакетов.
Стоит повторить, что метод get_stats может быть вызван в любое время, даже когда интерфейс выключен, поэтому драйвер должен хранить статистическую информацию так долго, как существует структура net_device. |
Предыдущая Содержание Следующая |