【问题标题】:Is anyone using netlink for IPC?有人使用netlink进行IPC吗?
【发布时间】:2014-12-02 00:10:24
【问题描述】:

我打算使用 netlink 在两个用户态进程之间进行通信。对 netlink 如此挑剔的部分原因是 - 其中一个进程的大部分处理最终将进入内核空间,并且可以按原样使用基于 netlink 的通信(希望如此)。

我采用的方法是 - 定义一个新的 Generic Netlink 系列(我必须编写一个内核模块来支持该系列 - 目前看起来如此)。很好,我正在查看一些示例代码,其中内核本质上只是在不同进程之间路由消息,并没有真正做任何工作——这些消息的实际数量是由进程处理的。

我的问题是 - 是否有人在任何项目中以类似的方式使用 netlink?另外 - 上述方法有意义吗?

我读到了关于基于 netlink 的 DBUS 的提案。但还没有找到任何实现。这最符合我的要求。

谢谢。

【问题讨论】:

  • Netlink socket 最大支持传输数据 4GB

标签: linux ipc netlink


【解决方案1】:

如果您想在用户空间进程之间进行通信,您正在寻找的是NETLINK_USERSOCK

不幸的是,Netlink 文档非常稀缺。这可能会有所帮助:Who can give me the latest netlink programming samples?

只需确保 nl_pid 不为零,并且与绑定的用户空间对等方匹配,并且您正在发送单播。

【讨论】:

  • 啊谢谢 - 我怎么会忽略这么明显的事情!是的 - 我做了一些与提到的例子非常相似的事情。不幸的是,我不想使用 libnl(因为在我的应用程序中,我想尽可能避免外部依赖),所以我需要做一些繁重的工作来让事情正常工作。
  • 在这种情况下,您正在谈论的东西不太可能不在系统上,除非您谈论的是嵌入式目标。几乎所有发行版都提供它。话虽如此,如果您仍然不想使用 libnl,您应该能够将 libnl 用作婴儿床单,以在您的“繁重工作”中以“正确”的方式做事。
  • @Svartalf 这正是我所做的。谢谢。
  • NETLINK_USERSOCK 似乎适用于:socket(AF_NETLINK, SOCK_RAW, NETLINK_USERSOCK); 这在尝试测试/模拟用户空间中的内核/用户交互时救了我。它不需要 libnl 就可以工作。谢谢!
最近更新 更多