Краткая справка

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

Этот раздел содержит ссылки на понятия, введённые в этой главе. Он также разъясняет роль каждого заголовочного файла, который должен подключать драйвер. Списки полей в структурах 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.

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