The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

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

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

Предыдущая  Содержание  Следующая 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.

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