2016-05-04 11 views
2

sk_buffインスタンスのオーナーソケット(たとえば、skb)を検索しようとしています。私の最終的な目標は、特定のTCPオプションを見つけて何らかの形でユーザー空間アプリケーションに知らせることです。私は、TCPオプションを見つけたらソケットオプションを設定し、ユーザスペースアプリにgetsockopt()をコールさせてみます。したがって、私はとsockの間の所有権を知る必要があります。Linuxカーネルでsk_buffのオーナーソケットを見つける方法は?

私はsk_buff内のフィールドがある見つける:

struct sock *sk; 

私はtcp_input.ctcp_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)を取得することができますから、

答えて

2

。正しいヘッダーを追加することを忘れないでください。

+0

コールの前にローカルBHを無効にする必要があります__inet_lookup_skb – sim

関連する問題