送信処理

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年12月09日 (土) 23時55分06秒 JST
1