【问题标题】:Two kernel modules, each uses netlink socket. How to use them both at the same time?两个内核模块,每个都使用 netlink 套接字。如何同时使用它们?
【发布时间】:2013-09-17 00:13:01
【问题描述】:

美好的一天。我想创建两个(几乎相同的)模块 - 每个模块都使用 netlink 套接字并回复来自用户空间程序的传入消息。

在第一个模块的初始化过程中,它成功执行了以下命令:

netlink kernel create(&init_net, NETLINK_USER, &cfg)

但是,如果我使用相同的参数启动第二个模块,相同的命令将导致错误。

我认为发生此错误是因为两个模块的 NETLINK_USER 值相同 - 31 - 这就是为什么我无法为同一个 netlink 用户创建第二个套接字连接。 但是,如果我尝试将 NETLINK_USER 值设为 32,则会出现内核错误。任何其他值 - 错误也是如此。

请告诉我,我需要做什么才能同时使用两个内核模块?

【问题讨论】:

  • 使用不同的网络链接 ID。
  • @IlyaMatveychikov 不同的网络链接 ID - 不同的 NETLINK_USER 值?允许使用哪些值?

标签: sockets linux-kernel kernel-module kernel netlink


【解决方案1】:

默认情况下,内核上有 32 个 netlink 插槽可用。其中一些被系统使用(例如,审计子系统)。您可以找到有关预定义常量here 的详细信息。至于您的问题,请尝试使用以下内容:

// module 1
netlink kernel create(&init_net, MAX_LINKS - 1, &cfg)
// module 2
netlink kernel create(&init_net, MAX_LINKS - 2, &cfg)

MAX_LINKS 这里是内核支持的 netlink 插槽的限制。

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 2017-04-08
    • 2014-05-05
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多