LINUX.ORG.RU

sk_buff - линейный буффер и skb_shared_info

 , , ,


0

1

Насколько я понимаю, sk_buff поддерживает возможность помещать данные линейно, а также странично, то есть нелинейно. «Страничность» определяется структурой skb_shared_info, которая помещается сразу после skb. Вопрос — гарантирует ли ядро минимальное количество байт, которые могут быть размещены в линейной области?


Странный вопрос. sk_buff не берется из ниоткуда. Его нужно сначала получить у ядра через alloc_skb() указав максимальный необходимый размер. В пределах этого размера есть некоторые гарантии.

vel ★★★★★ ()
Ответ на: комментарий от vel

Собственно вот здесь https://www.spinics.net/lists/netdev/msg449147.html David Miller пишет:

You're not guaranteed the this ershdr area is pulled linearly in the SKB. Only the GRE header and it's options have that guarantee.

So you'll need to add appropriate pskb_may_pull() checks here then reaload all of the packet pointers (including 'iph') afterwards.

Отсюда и мой вопрос.

cruz7 ()
Ответ на: комментарий от cruz7

Если ты хочешь пользоваться данными из sk_buff, то сначала нужно убедиться, что там есть данные необходимой длины. А в ссылке этой проверки нет.

vel ★★★★★ ()
Ответ на: комментарий от vel

Это понятно, для этого нам и нужен вызов pskb_may_pull(). Но меня заинтересовали вот эти слова из приведенной цитаты:

You're not guaranteed the this ershdr area is pulled linearly in the SKB. Only the GRE header and it's options have that guarantee.

То есть получается что ershdr может оказаться в страничной обласьт skb ?

cruz7 ()
Ответ на: комментарий от cruz7

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

Возможно в ATM такая фигня возможна.

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.