Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
IPパケットの送信処理はip_queue_xmit関数が行う。上位プロトコルモジュールからは、送信したいパケット(sk_buff)を引数にしてこの関数を呼び出す。ip_queue_xmit関数ではまずルーティング情報の検索(ip_route_output関数)を行い、その後IPヘッダの生成を行う。以上の処理が完了後、送信先がユニホストまたはブロードキャスト時はip_output関数を、マルチキャストの時はip_mc_output関数を呼び出す。
ip_output関数(ip_finish_output関数)は、ルーティング情報とARPテーブルの情報を元にハードウェアヘッダの生成まで行ってしまう。送信先が同一ネットワークで無い場合、送信先ハードウェアアドレスがルータとなるように設定する(イーサ以外のデバイスにも対応)。設定が完了すると dev_queue_xmit関数を呼び出し、ドライバ起動を要求する。あとの処理はドライバに任せる。
IPパケットの分割が必要な場合は、ip_queue_xmit関数からip_fragment関数を呼び出す。ip_fragment関数は複数のIPパケットに分割し、その後それぞれのIPパケットに対しip_output関数(ip_finish_output関数)を呼び出す。分割されたIPパケットには各々分割されたことを示すフラグが付けられる。
ip_queue_xmit関数と異なり、パケット(sk_buff)生成から行ってくれるip_build_xmit関数も用意されている。
捕捉 各種関数呼び出しには、関数ポインタが多用されているが、理解容易性のためここでは深く触れないことにする。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:46:35, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members