Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
|
|
Этот подраздел содержит справочную информацию об основных понятиях рассмотренных в этой главе. Также приводится назначение заголовочных файлов, необходимых драйверу. Список полей структур net_device и sk_buff здесь не приведен повторено.
hardorsoft
26.10.10 в 05:49
|
|
#include <"linux/netdevice.h"> Заголовочный файл содержит определения структур net_device net_device_stats и подключает еще несколько заголовочных файлов, необходимых сетевому драйверу.
hardorsoft
26.10.10 в 05:49
|
|
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
|
|
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
|
|
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
|
|
skb_shinfo(struct sk_buff *skb); Макрос предоставляет доступ к «совместно используемым данным» в буфере пакета
hardorsoft
26.10.10 в 05:52
|
|
void netif_rx(struct sk_buff *skb); Функция может быть вызвана (в том числе и из прерывания) для уведомления ядра о приеме пакета и находится в буфере сокета.
hardorsoft
26.10.10 в 05:53
|
|
void netif_rx_schedule(dev); Функция информирует ядро о том, что пакет – доступен, и что должен начаться опрос интерфейса. Используется только в NAPI- совместимых драйверах.
hardorsoft
26.10.10 в 05:53
|
|
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
|
|
#include <linux></linux>if.h> Подключает . Определяет флаги интерфейса (макросы IFF_) и структуру ifmap, которая играет важную роль в реализации ioctl для сетевых драйверов.
hardorsoft
26.10.10 в 05:53
|
|
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
|
|
#include <"linux/if_ether.h"> ETH_ALEN ETH_P_IP struct ethhdr; Подключает , if_ether.h определяет все макросы ETH_ используемые для представления длин в октетаx (таких как длинна адреса) и сетевых протоколов (таких как IP). Так же определяет структуру ethhdr. #include <"linux/skbuff.h"> Определяет структуру sk_buff и зависимые структуры, так же несколько inline функций для работы с буфером. Этот файл подключает <"netdevice.h">.
hardorsoft
26.10.10 в 05:54
|
|
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
|
|
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
|
|
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
|
|
unsigned char *skb_pull(struct sk_buff *skb, int len); Удаляет данные из skb, настраивая внутренние указатели.
hardorsoft
26.10.10 в 05:55
unsigned char *skb_pull(struct sk_buff *skb, int len); Удаляет данные из skb, настраивая внутренние указатели.
hardorsoft
26.10.10 в 05:55
|
|
int skb_is_nonlinear(struct sk_buff *skb); Функция возвращает true если skb разделен на насколько фрагментов для сегментированного ввода-вывода (scatter/gather I/O).
hardorsoft
26.10.10 в 05:56
|
|
int skb_headlen(struct sk_buff *skb); Возвращает длинну первого сегмента skb, на которую указывает skb->data.
hardorsoft
26.10.10 в 05:56
|
|
void *kmap_skb_frag(skb_frag_t *frag); void kunmap_skb_frag(void *vaddr); Функции предоставляют прямой доступ к фрагментам с нелинейным skb.
hardorsoft
26.10.10 в 05:56
|
|
#include <"linux/etherdevice.h"> void ether_setup(struct net_device *dev); Функция назначает большую часть методов для устройства, обеспечивая универсальную реализацию ethernet-драйверов. Также устанавливается dev->flags и назначается следующее доступное ethx имя для dev->name, если первый символ в имени – пробел или NULL.
hardorsoft
26.10.10 в 05:56
|
|
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
|
|
#include <"linux/sockios.h"> SIOCDEVPRIVATE Первые 16 команд ioctl могут быть использованы драйвером для специфичных целей. Все команды ioctl сетевого драйвера определены в sockios.h.
hardorsoft
26.10.10 в 05:57
|
|
#include <"linux/mii.h"> struct mii_if_info; Различные обьявления и структуры соответствующих стандарту MII.
hardorsoft
26.10.10 в 05:57
|
|
#include <"linux/ethtool.h"> struct ethtool_ops; Объявления и структура которая дает устройствам работать с утилитой ethtool.
hardorsoft
26.10.10 в 06:00
|
|