sk_buff
インスタンスのオーナーソケット(たとえば、skb
)を検索しようとしています。私の最終的な目標は、特定のTCPオプションを見つけて何らかの形でユーザー空間アプリケーションに知らせることです。私は、TCPオプションを見つけたらソケットオプションを設定し、ユーザスペースアプリにgetsockopt()
をコールさせてみます。したがって、私はとsock
の間の所有権を知る必要があります。Linuxカーネルでsk_buffのオーナーソケットを見つける方法は?
私はsk_buff内のフィールドがある見つける:
struct sock *sk;
私はtcp_input.c
にtcp_parse_options
でこのフィールドを取得しようとすると、しかし、私はいつもskb->sk == NULL
を取得します。
ここでオーナーを見つけるにはどうすればいいですか?
また、私は所有者のソケットを設定しているようだ3ヶ所を見つける:私も示すためsk_buff
に新しいフラグを追加し、それを設定し
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
をtcp_parse_options
。そして、この3つの場所でこの旗をチェックします。しかし、私はソケットオプションを設定するかどうかを判断できないようにフラグが設定されていることを示していません。
この問題のご意見やご提案はありますか?
ありがとうございます!
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;
私の仕事:sk_buff(SKB)あなたはこのような何かを持つ靴下(SK)を取得することができますから、
コールの前にローカルBHを無効にする必要があります__inet_lookup_skb – sim