Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 17.16. Quick Reference

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

17.16. Краткий обзор.

hardorsoft 26.10.10 в 05:48

0

Этот подраздел содержит справочную информацию об основных
понятиях рассмотренных в этой главе. Также приводится назначение
заголовочных файлов, необходимых драйверу. Список полей структур
net_device и sk_buff здесь не приведен повторено.

hardorsoft 26.10.10 в 05:49

0

#include <"linux/netdevice.h">
Заголовочный файл содержит определения структур net_device
net_device_stats и подключает еще несколько заголовочных
файлов, необходимых сетевому драйверу.

hardorsoft 26.10.10 в 05:49

0

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.

hardorsoft 26.10.10 в 05:50

0

int register_netdev(struct net_device *dev);
void unregister_netdev(struct net_device *dev);
Регистрация и отмена регистрации сетевого устройства.
void *netdev_priv(struct net_device *dev);
Функция возвращает указатель на приватные данные драйвера в
структуре сетевого устройства.

hardorsoft 26.10.10 в 05:50

0

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_wake_queue повторно запускает очередь и позволяет сетевому
уровню производить отправку пакетов.

hardorsoft 26.10.10 в 05:52

0

skb_shinfo(struct sk_buff *skb);
Макрос предоставляет доступ к «совместно используемым данным»
в буфере пакета

hardorsoft 26.10.10 в 05:52

0

void netif_rx(struct sk_buff *skb);
Функция может быть вызвана (в том числе и из прерывания) для
уведомления ядра о приеме пакета и находится в буфере сокета.

hardorsoft 26.10.10 в 05:53

0

void netif_rx_schedule(dev);
Функция информирует ядро о том, что пакет – доступен, и что
должен начаться опрос интерфейса. Используется только в NAPI-
совместимых драйверах.

hardorsoft 26.10.10 в 05:53

0

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 для
прекращения опроса.

hardorsoft 26.10.10 в 05:53

0

#include <linux></linux>if.h>
Подключает . Определяет флаги интерфейса
(макросы IFF_) и структуру ifmap, которая играет важную роль в
реализации ioctl для сетевых драйверов.

hardorsoft 26.10.10 в 05:53

0

void netif_carrier_off(struct net_device *dev);
void netif_carrier_on(struct net_device *dev);
int netif_carrier_ok(struct net_device *dev);
Первые две функции информируют ядро, когда сигнал carrier
присутствует на интерфейсе. netif_carrier_ok проверяет
состояние carrier, отраженное в структуре устройства.

hardorsoft 26.10.10 в 05:53

0

#include &lt;"linux/if_ether.h">
ETH_ALEN
ETH_P_IP
struct ethhdr;
Подключает , if_ether.h определяет все макросы
ETH_ используемые для представления длин в октетаx (таких как
длинна адреса) и сетевых протоколов (таких как IP). Так же
определяет структуру ethhdr.
#include &lt;"linux/skbuff.h">
Определяет структуру sk_buff и зависимые структуры, так же
несколько inline функций для работы с буфером. Этот файл
подключает &lt;"netdevice.h">.

hardorsoft 26.10.10 в 05:54

0

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);
Функции выполняют выделение и освобождение буфера сокета.

hardorsoft 26.10.10 в 05:55

0

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 – в начало. Версия без подчеркивания
проверяет наличие доступного пространства. Версия с двойным
подчеркиванием – не проверяет.

hardorsoft 26.10.10 в 05:55

0

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, которое должно быть
пустым.

hardorsoft 26.10.10 в 05:55

0

unsigned char *skb_pull(struct sk_buff *skb, int len);
Удаляет данные из skb, настраивая внутренние указатели.

hardorsoft 26.10.10 в 05:55

0

unsigned char *skb_pull(struct sk_buff *skb, int len);
Удаляет данные из skb, настраивая внутренние указатели.

hardorsoft 26.10.10 в 05:55

0

int skb_is_nonlinear(struct sk_buff *skb);
Функция возвращает true если skb разделен на насколько
фрагментов для сегментированного ввода-вывода (scatter/gather I/O).

hardorsoft 26.10.10 в 05:56

0

int skb_headlen(struct sk_buff *skb);
Возвращает длинну первого сегмента skb, на которую указывает
skb->data.

hardorsoft 26.10.10 в 05:56

0

void *kmap_skb_frag(skb_frag_t *frag);
void kunmap_skb_frag(void *vaddr);
Функции предоставляют прямой доступ к фрагментам с нелинейным
skb.

hardorsoft 26.10.10 в 05:56

0

#include &lt;"linux/etherdevice.h">
void ether_setup(struct net_device *dev);
Функция назначает большую часть методов для устройства,
обеспечивая универсальную реализацию ethernet-драйверов. Также
устанавливается dev->flags и назначается следующее доступное
ethx имя для dev->name, если первый символ в имени – пробел или
NULL.

hardorsoft 26.10.10 в 05:56

0

unsigned short eth_type_trans(struct sk_buff *skb, struct net_device
*dev);
При приеме Ethernet-интерфейсом пакета, эта функция позволяет
установить skb->pkt_type. Возвращается номер протокола, который
обычно храниться в skb->protocol.

hardorsoft 26.10.10 в 05:57

0

#include &lt;"linux/sockios.h">
SIOCDEVPRIVATE
Первые 16 команд ioctl могут быть использованы драйвером для
специфичных целей. Все команды ioctl сетевого драйвера
определены в sockios.h.

hardorsoft 26.10.10 в 05:57

0

#include &lt;"linux/mii.h">
struct mii_if_info;
Различные обьявления и структуры
соответствующих стандарту MII.

hardorsoft 26.10.10 в 05:57

0

#include &lt;"linux/ethtool.h">
struct ethtool_ops;
Объявления и структура которая дает устройствам работать с утилитой ethtool.

hardorsoft 26.10.10 в 06:00

0
Минутку...