В какой момент в стеке TCP добавляются различные фрагменты информации в skbuff? - PullRequest
0 голосов
/ 07 февраля 2019

Я пишу пользовательский драйвер устройства для собственного пакетного коммутатора на кристалле.

Пытаюсь выяснить, как использовать структуру данных skbuff.В основном, где в стеке добавляются определенные фрагменты информации?

Вот мое понимание стека:

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

Это все правильно?В основном это точки в стеке, в которых создается skbuff, и точки, в которые каждый фрагмент информации добавляется в skbuff

Спасибо за помощь, очистка этого кода будет огромной.

...