Статистическая информация

Предыдущая  Содержание  Следующая V*D*V

Последним необходимым методом драйвера является 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.

Предыдущая  Содержание  Следующая