NI-USRP 2954 10GbEサンプルプログラムからpingは返ってくるのか?



今日はドルフィンシステム福島です。

ドルフィンシステムがある池袋は海外旅行客の宿泊が多く、外に出るたびに大きな旅行カバンをゴロゴロ引いている旅行客とすれ違います。近くにシティホテルがいくつもありますので、そこに宿泊しているようです。

昨年は池袋近辺のシティホテルはほぼ満室。当日に予約を入れようとしても断られました(納品直前の泊まり込みの寝床確保が出来ない(笑))。
ですが今年は、ホテルの入り口に「空き部屋」あります、というメッセージが掲げれているのを見ることが増えました。
新型コロナウィルスの影響・・・ではなく日韓関係が騒がれた後からです。
その時、やはり旅行客は減っているんだなぁと感じました。

さて、前回の10GbEのサンプルプログラムの中身を見てみるでは、10GbEのサンプルソースコードを見てみました。
今回は10GbEを使ってUSRPにpingを送信してみます。

pingは返ってくるのか?

果たしてpingは返ってくるのでしょうか?
まずPORT1とPCをSFP+ケーブルで接続してみます。
(FPGAはPORT0でもPORT1でも、RxとTxの処理はしているのでどちらでも良さそうです。)



で、PC側のIPアドレスを固定で割り振ります。
IPアドレスは、
USRP-RIO側が169.254.122.137だったので、
PC側は169.254.122.130
にします。



USRP-RIOと接続したらリンクしたようです。



下図のように、FPGAを起動していない状態ではpingは返ってきません。
pingのエラーメッセージが「宛先ホストに接続できません。」なので、pingはおろか、arpにも応答していないようですね。FPGAが起動していないので当たり前ですね。



では次に、FPGAを動かしたままにしてみます。
サンプルソフトは1回送受信したら終了してしまいます。これを以下のように停止ボタンを押すまで停止しないようにしました。



すると、今度は相変わらずpingは通りませんが、エラーメッセージが変わりました。
「要求がタイムアウトしました。」というのは、
送り先は分かった(arp応答は来た)が
pingを送ったけれど返ってこなかった
という意味です。
つまりarpは返ってきているようです。



早速arp -aで確認すると、確かにPCのARPテーブルに登録されています!



ARPとは?

少しARPについて簡単にご説明をしておきます。
通常意識することはありませんが、ブラウザやpingなどのプログラムがTCP/IP等のパケットを送る際に、どこのイーサネットアダプタに送れば良いのか?が分かりません。
なので最初に、
IPアドレス xxx.xxx.xxx.xxx が設定されているイーサネットアダプタはありませんか?
とネットワーク上にブロードキャストして問い合わせをします。
これがARP要求です。
これに対して、
IPアドレス xxx.xxx.xxx.xxx 持っているのは、MACアドレス xx-xx-xx-xx-xx-xxです。
という応答が返ってきます。
これがARP応答です。応答が返ってきて初めてpingの送り先が分かります。



先ほどのエラーメッセージ、
「宛先ホストに接続できません。」→「ARP応答が返ってこない=送り先イーサネットアドレスが不明」
「要求がタイムアウトしました。」→「pingを送ったけど、応答が返ってこない」
ということになります。

まとめ


  1. USRPのサンプルプログラムを起動させると10GbEが動作する。(FPGAが動いていないと10GbEが動作しない)
  2. FPGAが動作していればARP応答はある。
  3. FPGAが動作していてもping応答はない。


次回は、ARPは返ってくるのにpingが返ってこないのか?その原因をFPGAソースコードから探っていきます。

以上、ドルフィンシステム福島でした。


コメント