我试图findsk_buff
实例的所有者套接字,比如skb
。 我的最终目标是find一个特定的TCP选项,并以某种方式让用户空间应用程序知道。 我打算在findTCP选项时设置套接字选项,并让用户空间应用程序调用getsockopt()
。 因此我需要知道sk_buff
和sock
之间的所有权。
我发现在sk_buff中有一个字段:
struct sock *sk;
但是,当我尝试在tcp_input.c
中的tcp_parse_options
检索这个字段时,我总是得到skb->sk == NULL
。
所以我想知道如何在这里find店主?
另外,我发现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
设置。 然后我在这三个地方检查这个标志。 但是他们都没有显示标志被设置,所以我不能确定是否设置套接字选项。
任何想法或build议这个问题?
提前致谢!
从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;
这对我有效。 不要忘记添加正确的标题。