Скб и Scatter собирать особенность - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть несколько вопросов, связанных с SKB.

когда мы пытаемся выделить skb с помощью alloc_skb (), будут выделены все заголовки, связанные с skb, например заголовок l4, заголовок l3, заголовок l2 и т. Д. Я видел sizeof (struct sk_buff) как 188. Это должно быть со всеми заголовками - я прав?

Содержимое skb будет смежным со всеми заголовками (учитывая лайнер skb без каких-либо фрагментов). исправить?

Сбор Scatter (SG) - аппаратная функция, используемая для извлечения данных из разных областей памяти для копирования (DMA) в память устройства.

Если skb будет лайнером и если он находится в пределах размера MTU, SG не будет использоваться.

Если skb не является линейным и если размер превышает размер MTU, будет использоваться SG.

Когда мы нажмем skb как нелинейный случай, в этом смысле skb имеет несколько фрагментов. Пожалуйста, подтвердите?

Спасибо, Кумар

1 Ответ

2 голосов
/ 23 ноября 2010

Я пытаюсь понять ваш вопрос.

Когда вы используете alloc_skb - вы указываете размер данных, которые вы хотели бы разместить в самой структуре skb. Обычно используется для сетевых заголовков .

Списки разброса внутри skb обычно используются для данных полезной нагрузки вашего пакета.

Это означает, что если у вас есть куча данных, находящихся в памяти, вы можете создать skb, оставляя место для заголовков, и записывать заголовки внутри самого skb - используйте записи SG для указания на ваши данные, исключая необходимость скопировать это.

Понятие "MTU" не имеет никакого отношения к используемому SG или нет.

Если вы "skb_put" данные в свой skb - они будут переданы с пакетом. Если вы добавите элементы в свой SG, они будут переданы.

...