Я пишу пользовательский драйвер устройства для собственного пакетного коммутатора на кристалле.
Пытаюсь выяснить, как использовать структуру данных skbuff.В основном, где в стеке добавляются определенные фрагменты информации?
Вот мое понимание стека:
- Приложение создает сокет
- это создает данные сокетаstruct и добавляет к нему IP-адрес
- Приложение вызывает функцию на сокете для отправки сообщения
- Переключение на ядро
- Ядро создает структуру данных skbuff, какподготовка к входу в сетевой стек * ядро 1018 *
- добавляет вещи в skbuff - добавляет указатель на начало пользовательского пространства сообщения, длину и IP-адрес цели (беря его из структуры данных сокета)
- проходы ядраskbuff к модулю ядра TCP
- Модуль TCP запрашивает у ОС буферы по 64 КБ каждый, копирует данные из сообщения в буферы, настраивает указатели в skbuff для указания на предоставленный ОС буфер
- Буферы находятся в ядреaddr space
- Для каждого буфера создается новый skbuff, который добавляется в список
- Список TCP-рук структур skbuff для драйвера коммутатора
- Драйвер устройства этой точки имеет: связанный список структур skbuff, каждая из которых имеет указатель на заголовок TCP, указатель на нижний колонтитул TCP и указатель на буфер ОС, который содержит полезную нагрузку пакета
Это все правильно?В основном это точки в стеке, в которых создается skbuff, и точки, в которые каждый фрагмент информации добавляется в skbuff
Спасибо за помощь, очистка этого кода будет огромной.