Я хочу добавить IP-заголовок в существующий IP-пакет, находясь внутри NF_HOOK_LOCAL_OUT.Проблема, с которой я сталкиваюсь, заключается в том, что функции расширения skb (такие как заголовок copy / clone / expand / reallocate) выделяют новый sk_buff.Мы не можем вернуть этот недавно выделенный указатель, так как функция ловушки netfilter больше не (версия ядра 2.6.31) передает адрес указателя skb (передает по значению).Как я решил проблему следующим образом: 1. Я получил новый skb с помощью skb_header_realloc ().Это копирует все данные из скб.2. Я изменил новый skb (назовем его skb2), добавив новый заголовок IP, добавив соответствующие значения в новый заголовок IP.3. Замените содержимое исходного skb (переданного в функции ловушки Netfilter) содержимым skb2 с помощью skb_morph ().Возвращено NF_ACCEPT.
Это единственный способ добиться того, к чему я стремился?Есть ли более эффективное решение?Существуют ли другие варианты использования skb_morph (кроме кода повторной сборки IP)?