Краткая справка |
Предыдущая Содержание Следующая |
Этот раздел содержит ссылки на понятия, введённые в этой главе. Он также разъясняет роль каждого заголовочного файла, который должен подключать драйвер. Списки полей в структурах net_device и sk_buff, однако, здесь не повторяются.
#include <linux/netdevice.h> Заголовок, который содержит определения struct net_device и struct net_device_stats и включает в себя несколько других заголовков, которые необходимы сетевым драйверам. struct net_device *alloc_netdev(int sizeof_priv, char *name, void (*setup)(struct net_device *); struct net_device *alloc_etherdev(int sizeof_priv); void free_netdev(struct net_device *dev); Функции для создания и освобождения структур net_device. int register_netdev(struct net_device *dev); void unregister_netdev(struct net_device *dev); Регистрация и отмена регистрации сетевого устройства. void *netdev_priv(struct net_device *dev); Функция, которая возвращает указатель на используемую драйвером область структуры сетевого устройства. struct net_device_stats; Структура, которая содержит статистику устройства. netif_start_queue(struct net_device *dev); netif_stop_queue(struct net_device *dev); netif_wake_queue(struct net_device *dev); Функции, контролирующие прохождение пакетов в драйвере для передачи. Пакеты не передаются, пока не была вызвана netif_start_queue. netif_stop_queue приостанавливает передачу и netif_wake_queue перезапускает очередь и подталкивает сетевой уровень для возобновления передачи пакетов. skb_shinfo(struct sk_buff *skb); Макрос, который обеспечивает доступ к части "общей информации" буфера пакета. void netif_rx(struct sk_buff *skb); Функция, которая может быть вызвана (в том числе во время прерывания), чтобы сообщить ядро о получении пакета и включении его в буфер сокета. void netif_rx_schedule(dev); Функция, которая сообщает ядру, что пакеты доступны и что надо начать опрос интерфейса; она используется только NAPI-совместимыми драйверами. int netif_receive_skb(struct sk_buff *skb); void netif_rx_complete(struct net_device *dev); Функции, которые должны использоваться только NAPI-совместимыми драйверами. netif_receive_skb является NAPI эквивалентом для netif_rx; она передаёт пакеты ядру. Когда NAPI-совместимый драйвер исчерпал поставку полученных пакетов, он должен снова включить прерывания и вызвать netif_rx_complete для остановки опроса.
#include <linux/if.h> Подключается через netdevice.h, этот файл объявляет интерфейсные флаги (макросы IFF_) и struct ifmap, которая играет важную роль в реализации ioctl для сетевых драйверов. void netif_carrier_off(struct net_device *dev); void netif_carrier_on(struct net_device *dev); int netif_carrier_ok(struct net_device *dev); Две первые из этих функций могут быть использованы, чтобы сообщить ядру, присутствует ли в настоящее время на данном интерфейсе несущий сигнал. netif_carrier_ok проверяет состояние несущей, как это отражено в структуре устройства.
#include <linux/if_ether.h> ETH_ALEN ETH_P_IP struct ethhdr; Подключаются через netdevice.h, if_ether.h определяет все макросы ETH_, которые используются для представления длин октетов (таких как длина адреса) и сетевых протоколов (таких как IP). Она также определяет структуру ethhdr.
#include <linux/skbuff.h> Описание struct sk_buff и связанных с ней структур, а также нескольких встраиваемых функций для работы с буферами. Этот заголовок подключается через netdevice.h. struct sk_buff *alloc_skb(unsigned int len, int priority); struct sk_buff *dev_alloc_skb(unsigned int len); void kfree_skb(struct sk_buff *skb); void dev_kfree_skb(struct sk_buff *skb); void dev_kfree_skb_irq(struct sk_buff *skb); void dev_kfree_skb_any(struct sk_buff *skb); Функции, которые занимаются созданием и освобождением буферов сокетов. Драйверы обычно используют варианты dev_, которые предназначены для такой цели. unsigned char *skb_put(struct sk_buff *skb, int len); unsigned char *__skb_put(struct sk_buff *skb, int len); unsigned char *skb_push(struct sk_buff *skb, int len); unsigned char *__skb_push(struct sk_buff *skb, int len); Функции, которые добавляют данные в skb; skb_put помещает данные в конец skb, а skb_push помещает их в начало. Обычные версии осуществляют проверку для уверенности, что в наличии имеется достаточное пространство; версии с двойным подчеркиванием не выполняют таких проверок. int skb_headroom(struct sk_buff *skb); int skb_tailroom(struct sk_buff *skb); void skb_reserve(struct sk_buff *skb, int len); Функции, которые выполняют управление пространством внутри skb. skb_headroom и skb_tailroom сообщают, сколько свободного места доступно на начале и конце skb, соответственно. skb_reserve может быть использована для резервирования места в начале skb, которое должно быть пустым. unsigned char *skb_pull(struct sk_buff *skb, int len); skb_pull "удаляет" данные из skb путём корректировки внутренних указателей. int skb_is_nonlinear(struct sk_buff *skb); Функция, которая возвращает значение "истина", если этот skb разделён на несколько фрагментов для ввода/вывода с разборкой/сборкой. int skb_headlen(struct sk_buff *skb); Возвращает длину первого сегмента skb, той части, на которую указывает skb->data. void *kmap_skb_frag(skb_frag_t *frag); void kunmap_skb_frag(void *vaddr); Функции, которые обеспечивают прямой доступ к фрагментам в нелинейном skb.
#include <linux/etherdevice.h> void ether_setup(struct net_device *dev); Функция, которая устанавливает большинство методов устройства для реализации драйверов Ethernet общего назначения. Она также устанавливает dev->flags и присваивает следующее доступное ethx имя для dev->name, если первый символ в имени является пробелом или символом NULL. unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev); Когда интерфейс Ethernet принимает пакет, эта функция может быть вызвана для установки skb->pkt_type. Возвращаемое значение является номером протокола, который обычно хранится в skb->protocol.
#include <linux/sockios.h> SIOCDEVPRIVATE Первая из 16-ти команд ioctl, которые могут быть реализованы каждым драйвером для его личного использования. Все сетевые команды ioctl определены в sockios.h.
#include <linux/mii.h> struct mii_if_info; Декларации и структура, поддерживающие драйверы устройств, реализующих стандарт MII.
#include <linux/ethtool.h> struct ethtool_ops; Декларации и структуры, которые позволяют устройствам работать с утилитой ethtool. |
Предыдущая Содержание Следующая |