我正在尝试找到一个的所有者插座sk_buff
举例来说,skb
。我的最终目标是找到特定的 TCP 选项并以某种方式让用户空间应用程序知道。我打算在找到TCP选项时设置一个套接字选项并让用户空间应用程序调用getsockopt()
。因此我需要知道之间的所有权sk_buff
and sock
.
我发现sk_buff中有一个字段:
struct sock *sk;
但是,当我尝试检索该字段时tcp_parse_options http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L3418 in tcp_input.c
,我总是得到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#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#L4196
http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4456 http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4456
我还添加了一个新标志sk_buff
用于指示并将其设置为tcp_parse_options
。然后我在这三个地方检查这个标志。但它们都没有显示标志已设置,因此我无法确定是否设置套接字选项。
对于这个问题有什么想法或建议吗?
提前致谢!
从 sk_buff (skb) 中,您可以通过如下方式获取袜子 (sk):
const struct tcphdr *th = tcp_hdr(skb);
struct sock *sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
if (sk)
struct socket* = sk->sk_socket;
这对我有用。不要忘记添加正确的标题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)