标签: linux-kernel kernel netlink
我正在编写内核模块,通过通用netlink从用户空间接收消息。当我访问genl_info-> snd_pid时,在内核回调函数中,我得到了进程ID。
根据libnl文档:
libnl根据进程标识符生成唯一的端口号,并为其添加偏移量,允许使用多个套接字。出于向后兼容性原因,初始套接字仍将等于进程标识符。
我的用户空间应用程序使用多个线程,我需要区分它们。谢谢你的帮助。
答案 0 :(得分:1)
您可以使用两个选项:
通过所有线程共享一个netlink套接字,但使用您自己的通用netlink协议的NLA来识别线程
在每个线程中打开自己的netlink套接字并使用以下技巧:
当前PID_MAX_LIMIT == 2 ^ 22,而pid字段的类型为uint32。因此,可以使用pid将进程'pid和一些id< = 1024打包在一起。请参阅示例:in C,(libnl)和in Python(pyroute2)。
PID_MAX_LIMIT
pid
uint32