C语言 sockaddr_nl中的nl_pid和nlmsghdr中的nlmsg_pid有什么区别? &



发送netlink消息时,我猜sockaddr_nl结构中的nl_pidnlmsghdr结构中的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(例如在infinibandxfrm子系统中使用)。

但是struct sockaddr_nl用于netlink地址的内部表示(用于netlink套接字的dst_portid)。它只是在af_netlink中出于自己的目的。显然"网络链接地址";应该有"端口id">

最新更新