2016-07-07 4 views
1

私はUDPの上にLinuxカーネルのプロトコルを実装していて、パケットを受け取ったときにカーネル内から返信したいと思っています。このために、宛先(受信パケットの送信元アドレス)へのルートを取得してから返信するには、ip4_datagram_connectを実行します。ipヘッダからstruct sockaddr_inを補充する__be32 saddrとudpヘッダ__be16 source

ip4_datagram_connectを呼び出すには、関数にアドレスとして渡すためにsockaddr_in構造体を記入する必要があります。

構造体のsockaddr_in、比較に

unsigned short sin_port;   
struct in_addr sin_addr; 

構造体

__be16 source;

iphdr 構造体 udphdr

私の質問は、アドレスとポートをパケットヘッダーからsockaddr_in構造体にコピーするためのヘルパー関数が必要ですか(ソケットプログラミングでhtonsなどを使う方法など)?

答えて

1

生のIPおよびUDPヘッダーの値は、すでにネットワークバイトオーダーになっています。例えば、beは、 __be16は "Big Endian"の略で、ネットワークバイトオーダーです。 __be16__be32の数字がビット数です。

sockadd_in構造のフィールドもネットワークバイトオーダーであると考えられます。 htonsという名前は、「Host To Network Short」の略で、ホストバイトオーダーからネットワークバイトオーダーに(普通は16ビットである)shortを変換します。

あなたの質問に答えてください:いいえ、あなたは何もする必要はありません。sin_portsin_addr.s_addrへの単純な割り当てで十分です。

+0

ありがとう、私はそれを試してみて、ここで報告する:) –

+0

それは期待どおりに機能しましたか? –

関連する問題