На данный момент получилось у меня и
расшифровать принятый пакет.
Но я шифровал только маленький поток информации - 1 килобайт. Т.е. только один пакет.
Вот так можно изобразить пространство пакета:
Packet data - это сам пакет. В зависимости от того на каком уровне в данный момент находится skb, в этом пространстве записана различная информация, включая заголовки разных уровней и сами данные*
Вот так выглядит это пространство после прохождения skb через протокол IP.
Далее skb проходит через мой модуль ядра и я шифрую пакет:
crypt header - мой заголовок. в нём 2 поля: флаг, по которому я определяю что пришел зашифрованный пакет и длина исходного tcp пакета.
headroom и tailroom - свободное пространство переда пакетом и после него соответственно.
Пока пакет был меньше, чем разрешает MTU (<1500) все было нормально, мне всегда хватало tailroom, чтобы поместить в skb увеличенный на 6 байт пакет после шифрования и добавления криптозаголовка.
Но когда появляется пакет, равный по размеру MTU - 1500 байт, то tailroom у него всегда 0. И мне не хватает места...
Я находил разные функции для увеличения, резервирования пространства headroom, но нет ни одной для tailroom...
Я пока в раздумии что с этим делать...