次に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設定で全パケット受信可にしていたのを
自局アドレスとブロードキャストアドレスのみの設定に戻しました。