【问题标题】:Can NETLINK_ROUTE channel be used to send messages from kernel module to a user-space program?NETLINK_ROUTE 通道可以用于将消息从内核模块发送到用户空间程序吗?
【发布时间】:2014-07-10 07:15:47
【问题描述】:

我编写了一个用户空间程序,该程序使用带有NETLINK_ROUTE 协议的netlink 套接字轮询可用以太网接口的运行状态。
但是现在我想编写一个内核模块,它使用 NETLINK_ROUTE 通道向这个用户空间程序发送定制的通知消息。
在阅读了netlinkrtnetlink 的手册页后,我无法得出结论是否可行。任何建议将不胜感激。

【问题讨论】:

    标签: linux kernel-module netlink


    【解决方案1】:

    NETLINK_ROUTE 不是协议 - 它是 netlink 系列之一。来自手册页:

    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 系列(如 NETLINK_ROUTE)相关 - 请使用它。但是,如果您只想发送您自己的自定义信息 - 请使用通用网络链接。

    【讨论】:

    • 我只想使用NETLINK_ROUTE 系列。但是我观察到您无法使用netlink_kernel_createNETLINK_ROUTE 创建套接字,因为它已经归内核所有。所以现在我需要使用这个已经创建的套接字发送自定义消息。如何发送虚拟消息?有什么想法吗?
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2023-03-12
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多