发送netlink消息时,我猜sockaddr_nl
结构中的nl_pid
和nlmsghdr
结构中的nlmsg_pid
都是用来表示消息来源的。这不是多余的吗?还是有别的目的?
根据netlink手册页:" nlmsg_seq和nlmsg_pid对netlink核心是不透明的。"我猜这两个只是让用户跟踪消息和确认。我仍然想知道为什么这不是处理nlmsg_seq和什么情况下nlmsg_pid将是有用的?
发送netlink消息时,我猜sockaddr_nl结构中的nl_pid和nlmsghdr中的nlmsg_pid结构用于显示消息
的来源
部分你是对的。在这两种情况下,它确实代表了消息的起源。
但不仅在发送到内核时,当netlink引擎内部处理netlink请求时也是如此。
这不是多余的吗?
认为这么多聪明的人(Linux内核开发人员)做了一些愚蠢的事情,在内核中留下了一些不必要的东西,这是天真的。
Netlink是一个API。所以有一个API可以通过对netlink消息的操作来使用。消息通过struct nlmsghdr
表示。它是一个API——使用它就可以了。
您将看到一些使用此API的示例,如果您将在内核源代码中以这样的方式进行grep:grep -rnI nlmsg_pid
(例如在infiniband和xfrm子系统中使用)。
但是struct sockaddr_nl
用于netlink地址的内部表示(用于netlink套接字的dst_portid
)。它只是在af_netlink中出于自己的目的。显然"网络链接地址";应该有"端口id">