ARP
Rev.5を表示中。最新版はこちら。
IPv4のアドレス解決プロトコルARPの実装にかんするメモ
概要
ARPのアドレス解決処理の多くは他のプロトコルとの共通処理(Neighbour)として実装されている。データ構造などの詳細はアドレス解決プロトコルを参照。ARPの管理テーブルの大元はstruct neigh_table arp_tblになる。
関連ルーチン
arp_rcv()
ARPパケットの受信ルーチン
パケットの内容をチェックして問題なければ、arp_process()を呼びだす。
パケットの内容をチェックして問題なければ、arp_process()を呼びだす。
arp_process()
ARPパケット受信処理のメインルーチン
arp_bind_neighbour(dst)
dstにARPエントリを括り付ける。
NextHop(((struct
rtable*)dst)->rt_gateway)に対して__neigh_lookup_errno()を呼び出し、Neighborエントリ(ARPエントリ)を探す。見つかったエントリをdst->neighbourに登録する。もしARPエントリがまだなかった場合は、__neigh_lookup_errno()は新しいエントリを作成してそれを返すので空エントリが登録される。このエントリの状態はNUD_NONE。
このルーチンはrt_intern_hash()でルーティングキャッシュにエントリを追加する時に呼び出される。
このルーチンはrt_intern_hash()でルーティングキャッシュにエントリを追加する時に呼び出される。
arp_solicit()
ARP Requestの送信ルーチン
struct neigh_opsの.solicitに登録されており、共通処理部(Neighbour)からアドレス解決やProbeで、Requestの送信が必要になった時に呼び出される。
struct neigh_opsの.solicitに登録されており、共通処理部(Neighbour)からアドレス解決やProbeで、Requestの送信が必要になった時に呼び出される。
[関連ページ]
アドレス解決プロトコル
ルーティングテーブル
IPv4