受信処理

下位レイヤがIPパケットを受信すると、IPプロトコルスタック中のip_rcv関数が呼び出される。ip_rcv関数は、まず他のプロトコルモジュールとパケット共有していないかチェックし、もし共有していたら複製を生成する(skb_share_check関数)。

次に、ip_rcv関数は、IPパケットのヘッダ整合性チェックや、自ホストに対するIPパケットか転送しなければならないIPパケットであるかの判定を行う(ip_route_input関数)。その後IP拡張オプションがあればそのオプションに対する処理(ip_option_compile関数)なども行う。

IPパケットが自ホスト宛であった場合、ip_rcv関数はip_local_deliver関数を呼び出す。(マルチキャストの場合はip_mr_input関数のこともある)ip_local_deliver関数は、分割(フラグメント化)されたパケットであれば、すぐには上位レイヤに上げずにこの関数内でIPパケットの復元(リアセンブル)を行う(ip_defrag関数)。その後、IPヘッダ内のプロトコルIDをチェックし、プロトコルIDに対応する上位レイヤ(ICMP, UDP, TCPなど)にIPパケットを上げる(inet_protocolテーブルを検索し、上位プロトコルスタックの受信関数を呼び出す)。

IPパケットを覗きみるためのrawアクセス用socketがあれば、受信IPパケットを複製(skb_clone関数)し、raw_rcv関数も呼び出す。


(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1