Самому NetLink не важно, являются ли данные строкой, целым числом, структурой и т. Д. Он просто берет пустое значение * и длину и копирует данные, не просматривая их. Вы можете привести свою структуру к void * и использовать sizeof, чтобы определить длину и отправить эти данные по netlink.
С другой стороны, вам просто нужно получить void * и length, убедиться, что длина равна ожидаемой, и привести void * обратно к указателю на вашу структуру. Необходимо проверить две важные вещи:
И код UserSpace, и код KernelSpace согласуются с макетом памяти структуры. Это означает компиляцию обоих файлов с одинаковым .h и обеспечение того, чтобы параметры компиляции были такими, чтобы расположение и выравнивание памяти были одинаковыми.
Структура будет передана как просто необработанная копия памяти, нет интеллекта для исправления указателей, поэтому ваша структура не может содержать указателей и т. Д.
Другой вариант, вместо того, чтобы пересылать необработанные данные, «сериализовать» данные самостоятельно, преобразовав их в строку в известном формате. Это позволит вам обрабатывать более сложные структуры данных за счет дополнительных ресурсов процессора и памяти