2

我正在编写通过通用网络链接从用户空间接收消息的内核模块。当我在内核回调函数中访问 genl_info->snd_pid 时,我得到了进程 ID。

根据 libnl 文档:

libnl 根据进程标识符生成唯一的端口号,并为其添加一个偏移量,以允许使用多个套接字。出于向后兼容性的原因,初始套接字仍将等于进程标识符。

我的用户空间应用程序使用多个线程,我需要区分它们。谢谢你的帮助。

4

1 回答 1

3

您可以使用两个选项:

  1. 通过所有线程共享一个 netlink 套接字,但使用您自己的通用 netlink 协议的 NLA 来识别线程

  2. 在每个线程中打开自己的 netlink 套接字并使用以下技巧:

当前PID_MAX_LIMIT== 2 ^ 22,而pid字段类型为uint32. 因此,可以使用pid将进程的 pid 和一些 id <= 1024 打包在一起。请参考示例:在 C 中,(libnl) 和Python (pyroute2)。

于 2015-04-16T09:59:30.607 回答