CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

PING開通

次にARPモジュールをリンクしました。
これはデータリンク層ARPプロトコルとわかったら自局のMACアドレスを乗せたARP応答を行うものです
この状態でボードの自局IPアドレスを"192.168.0.10"として
このアドレスに対してPCからPINGを打つとまだ当然タイムアウトになります。
でもここでPC上のキャッシュを見てみると

>arp -a
Interface: 192.168.0.2 on Interface 0x2000003
Internet Address Physical Address Type
192.168.0.10 00-02-cb-01-a5-c9 dynamic

となっており、ボード上の物理アドレスが取得できています。
つまりPINGの中で行われたARP要求に対し、ボードがきちんとARP応答をしているようです。

さらにICMPモジュールもリンクしてループをこうしました

while(1){
 while(!ip_input()){};
 switch( ip.protocol ){
 case ICMP:
icmp_input();
break;
default:
  break;
}
}

これはIPパケットが来たらそのヘッダからプロトコルを判別しICMPパケットであれば
応答処理を行うというものです。

この状態でPCから192.168.0.10へPINGを打つと

>ping 192.168.0.10
Pinging 192.168.0.10 with 32 bytes of data:

Reply from 192.168.0.10: bytes=32 time=3ms TTL=64
Reply from 192.168.0.10: bytes=32 time=2ms TTL=64
Reply from 192.168.0.10: bytes=32 time=2ms TTL=64
Reply from 192.168.0.10: bytes=32 time=2ms TTL=64

Ping statistics for 192.168.0.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 2ms, Maximum = 3ms, Average = 2ms

おぉ、やりました。PINGが通り、疎通テスト成功です。

なおこれ以降はARP物理アドレスの解決が行われるので
前回テストのときRTL8019のRCR設定で全パケット受信可にしていたのを
自局アドレスとブロードキャストアドレスのみの設定に戻しました。