有人在使用netlink进行进程间通信吗?

11

我打算在两个用户空间进程之间使用netlink进行通信。其中一个选择netlink的原因是 - 其中一个进程的大部分处理最终会进入内核空间,基于netlink的通信可以直接使用(希望如此)。

我的方法是 - 定义一个新的Generic Netlink家族(目前看来我必须编写一个内核模块来支持该家族)。这很好,我看了一些示例代码,内核基本上仅在不同进程之间路由消息,而实际的消息填充由各个进程处理。

我的问题是 - 是否有人在任何项目中以类似的方式使用netlink?同时 - 上述方法是否合理?

我读过有关基于netlink的DBUS的提案。但没有找到任何实现。 这最接近我的要求。

谢谢。


Netlink套接字可以支持高达4GB的数据传输。 - Kakarot
1个回答

6
您要查找的是NETLINK_USERSOCK,如果您想在用户空间进程之间进行通信。
不幸的是,Netlink文档非常匮乏。这可能会有所帮助:Who can give me the latest netlink programming samples? 只需确保nl_pid为非零,并且与用户空间对等体绑定的PID匹配,并且您正在发送单播。

啊谢谢 - 我怎么会忽视一个这么明显的东西!是的 - 我做了和提到的例子之一非常相似的事情。不幸的是,我不想使用libnl(原因是在我的应用程序中,我想尽可能避免外部依赖),所以我必须要做一些很费力的工作才能让这个东西工作。 - gabhijit
在这种情况下,你所说的东西很可能不会存在于系统上,除非你是在谈论嵌入式目标。几乎所有的发行版都提供它。话虽如此,如果你仍然不想使用libnl,你应该能够将其作为参考来正确地完成你的“重活”,并做到事半功倍。 - Svartalf
@Svartalf 那正是我所做的。谢谢。 - gabhijit
NETLINK_USERSOCK 似乎在以下情况下有效: socket(AF_NETLINK, SOCK_RAW, NETLINK_USERSOCK);当我尝试在用户空间中测试/模拟内核/用户交互时,这个方法帮了我大忙。它可以在不需要 libnl 的情况下工作。谢谢! - hesham_EE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接