Можно ли использовать канал 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, - тогда используйте его. Но если вы хотите просто отправить свою собственную и пользовательскую информацию - используйте общую ссылку.