Можно ли использовать канал NETLINK_ROUTE для отправки сообщений из модуля ядра в программу пространства пользователя?

Я написал программу пользовательского пространства, которая опрашивает состояние доступных интерфейсов Ethernet на предмет их рабочего состояния, используя netlink розетки с NETLINK_ROUTE протокол.
Но теперь я хочу написать модуль ядра, который использует канал NETLINK_ROUTE для отправки настроенного уведомления в эту программу пользовательского пространства.
После прочтения справочной страницы для netlink а также rtnetlink Я не могу заключить, если это выполнимо. Любые предложения будут высоко оценены.

1 ответ

NETLINK_ROUTE - это не протокол, а одно из семейств netlink. С manpage:

netlink_family выбирает модуль ядра или группу netlink для связи.

Изначально Netlink был разработан для быстрого и простого обмена информацией о маршрутизации, поэтому NETLINK_ROUTE - это первое семейство, в котором есть собственные справочные руководства, руководства и т. Д. Но позже были добавлены другие семейства для отправки, помимо информации о маршрутизации, например, NETLINK_SELINUX и NETLINK_FIREWALL.

Через некоторое время разработчики увидели, что существует слишком много конкретных семейств. Если кто-то хочет использовать этот модный протокол netlink, ему нужно объявить другую семью и сделать его еще хуже. Поэтому они добавили последнее семейство - NETLINK_GENERIC, которое работает как мультиплексор. На lwn есть отличное руководство по общей сетевой ссылке - http://lwn.net/Articles/208755/. Если вы хотите рабочие примеры, вы можете посмотреть мой код ( https://github.com/dzeban/keymon)

Итак, если ваши уведомления относятся к какому-либо конкретному семейству сетевых ссылок, например NETLINK_ROUTE, - тогда используйте его. Но если вы хотите просто отправить свою собственную и пользовательскую информацию - используйте общую ссылку.

Другие вопросы по тегам