gpt4 book ai didi

sockets - 我可以在内核空间中拥有超过 32 个 netlink 套接字吗?

转载 作者:行者123 更新时间:2023-12-03 11:53:10 26 4
gpt4 key购买 nike

我有几个需要与用户空间交互的内核模块。因此,每个模块都有一个 Netlink 套接字。

我的问题是这些套接字相互干扰。这是因为它们都注册到同一个 Netlink 地址系列(因为可用的开头并不多 - max is 32more than half are already reserved),而且它们都将自己绑定(bind)到同一个 pid(内核 pid -零)。

我希望有更多的地址家庭空间。或者,更好的是,我希望我可以将我的套接字绑定(bind)到其他 pid。如果任何时候只能打开 32 个套接字,为什么 Netlink 是首选的用户内核 channel ?

libnl-3's documentation

The netlink address (port) consists of a 32bit integer. Port 0 (zero) is reserved for the kernel and refers to the kernel side socket of each netlink protocol family. Other port numbers usually refer to user space owned sockets, although this is not enforced.



最后一个说法现在似乎是一个谎言。内核使用 constant as pid并且不导出更多功能:
if (netlink_insert(sk, 0))
goto out_sock_release;

我想我可以重新编译内核并增加地址族限制。但这些是内核模块;我不应该那样做。

我错过了什么吗?

最佳答案

不。

Netlink 的套接字计数限制是 Generic Netlink 的原因存在。

Generic Netlink 是 Stock Netlink 之上的一层。您无需打开套接字,而是在已建立的套接字上注册回调,并收听指向“子”系列的消息。鉴于有更多可用的系列插槽(1023)并且没有端口,我假设他们认为在这一层没有必要将系列和端口分开。

要在内核空间中注册一个监听器,请使用 genl_register_family() 或其siblings .在用户空间,Generic Netlink 可以通过 libnl-3's API 使用。 (虽然它相当有限,但代码说了很多并且是开放的)。

关于sockets - 我可以在内核空间中拥有超过 32 个 netlink 套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com