【发布时间】:2016-05-06 02:22:49
【问题描述】:
我正在尝试查找sk_buff 实例的所有者套接字,例如skb。我的最终目标是找到一个特定的 TCP 选项并以某种方式让用户空间应用程序知道。我打算在找到 TCP 选项时设置一个套接字选项,并让用户空间应用程序调用getsockopt()。因此我需要知道sk_buff 和sock 之间的所有权。
我发现sk_buff中有一个字段:
struct sock *sk;
但是,当我尝试在tcp_input.c 中的tcp_parse_options 检索此字段时,我总是得到skb->sk == NULL。
所以我想知道如何在这里找到所有者?
另外,我发现 3 个地方似乎设置了所有者套接字:
http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4181
http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4196
http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4456
我还在sk_buff 中添加了一个新标志,用于指示并将其设置为tcp_parse_options。然后我在这三个地方检查这个标志。但是它们都没有显示标志已设置,因此我无法确定是否设置套接字选项。
对这个问题有什么想法或建议吗?
提前致谢!
【问题讨论】:
标签: linux sockets tcp linux-kernel