Сокеты Netlink для связи ядра с пользовательским пространством

#c #sockets #linux-kernel #ipc #netlink

#c #сокеты #linux-ядро #ipc #netlink

Вопрос:

Мне нужен IPC между обменом данными между ядром и пользовательским пространством. Модуль ядра должен сначала инициировать связь с модулем пользовательского пространства.

Я рассмотрел различные методы связи ядра с пользовательским пространством, такие как IOCTL, char device, сокеты Netlink. Поскольку мне нужно, чтобы ядро инициировало связь, я удалил IOCTL и char device, поскольку управление начинается из пользовательского пространства. Я нашел только сокеты Netlink с полнодуплексной связью.

Но я не смог найти простой пример программы, в которой ядро сначала инициирует вызов пользовательского пространства. Я смог найти только пример для пользовательского пространства, инициирующего вызов. Не могли бы вы, пожалуйста, указать мне на книги или примеры, которые показывают, как ядро может инициировать связь сокета Netlink с пользовательским пространством. Спасибо!

Комментарии:

1. Найдите существующий k-модуль, который делает это, и загрузите исходный код?

2. Вы видели, что ваше приложение или какой-либо другой код в ядре может подписываться на группы netlink, и соответствующее событие в ядре транслируется всем подписчикам.

3. @user7718036 смотрите использование rtnl_notify() в исходном коде ядра Linux.

4. Спасибо, ребята. Я смог установить связь между ядром и пользовательским пространством с ядром, инициирующим процесс. Я использовал устройство char для отправки pid модуля пользовательского пространства, а затем создал сокет netlink ядра и отправил одноадресное сообщение.

5. Просто любопытно узнать, есть ли способ получить сообщение netlink в ядре без указания целевой функции .input в структуре netlink_kernel_cfg.