как стек tcp / ip получает интерфейс net_device в linux - PullRequest
1 голос
/ 16 февраля 2012

Я читал код драйвера сетевого устройства. Мой драйвер следует модели драйвера. REF: ядро ​​/ Документация / модель драйвера.Чтение через interface.txt: {Интерфейсы устройств - это логические интерфейсы классов устройств, которые напрямую связаны с интерфейсами пользовательского пространства, такими как узлы устройств.Каждый интерфейс получает каталог в каталоге класса устройства, к которому он принадлежит.}

Пока не удалось точно определить точный интерфейс. Итак, пройдя через структуру net_device и интерфейс программирования в файле interface.txt (kernel./Documentation/driver-model), я снова пришел к выводучто это net_device, о котором говорят эти люди.Теперь я хочу узнать, является ли стек TCP / IP физическим, а канальный уровень - сетевым драйвером. Я хочу дать интерфейс, который мой сетевой драйвер предоставляет моему стеку tcp / ip. Вопрос: Как?Как я могу передать структуру net_device в стек TCP / ip.Кто-нибудь знает об этом.С уважением, Шраддха

.

1 Ответ

5 голосов
/ 16 февраля 2012

Иерархия выглядит следующим образом

struct inet_protosw (интернет-протоколы) содержит указатель на прото-член struct (протокол)

struct sock имеет указатель на прото-член struct (протокол)

struct sock имеет член к элементу struct sk_buff_head

struct sk_buff_head имеет два указателя на элементы структуры для sk_buff (один вызывается следующим, другой вызывается prev)

struct sk_buff содержит указатель на член структуры net_device.

Я не думаю, что вы регистрируете net_device напрямую в inet_protosw.

Сначала inet_init регистрирует встроенные сетевые протоколы, вызывая proto_register, затем вызывает inet_register_protosw для инициализации протоколов, затем инициализирует различные модули inet (ip, tcp, icmp и т. Д.).

Интерфейс, отвечающий за связывание протоколов и устройства, позже имеет register_netdevice и unregister_netdevice, которые делают то же, что и звук, а также регистрируют и отменяют регистрацию сетевых устройств в ядре. Чтобы отправить пакет из протокола через устройство, используйте dev_queue_xmit, а netif_rx принимает пакетные передачи от уровня устройства к сетевому уровню, затем он вызывает netif_rx_schedule, чтобы запланировать пакет для дальнейшей обработки.

Ресурсы и документация по организации / рабочему процессу включают в себя:

...