- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
こんにちは。ドルフィンシステム福島です。
今回は2020/02/03の続きです。
以前10GbEイーサネットを有効にしたNI USRP-2954Rでpingが返ってこない?ところまで確認しました。今日はその原因をFPGAソースコードを見て探ってみます。
以下は、前々回でもお見せしましたが、PORT 0 の処理です。
SFP+コネクタでのイーサネットフレーム送受信を行っている部分ですね。
実際には、RxやTxと書かれているVI内で処理が行われています。
開いてみるとこのようになっています。
右側半分の最終出力は"debug data"となっており処理には関係ないので、画像に入っていません。
左端の端子からイーサネットが受信したデータが入ってきて、Host Rx FIFOへの書き込んでソフトにデータを渡すところまでが一連の流れのようです。
左端の端子は、恐らくイーサネットコントローラーからの生のデータ(イーサネットフレーム)が流れてきていると思われます。
その次のVIの中では、MACアドレスなどの抽出が行われARPコマンドの応答処理が実装されています。出力しているのは"MAC Data Stream"なのでイーサネットフレームが出ていると思いきや、実際にはIPv4パケットが出てきます。
更にその次のVIが出力しているのは、IPv4ヘッダ情報などが解析されたIPv4パケットが出てきます。
更にその次のVIが出力しているのが"UDP Data Stream"となっていますので、UDPパケットです。
生のデータ→イーサネットフレーム→IPv4パケット→UDPパケット→ホストのFIFOへ
というふうに順番にパケットを解析しデータを抽出しホストに渡しているようです。
上記のVIを深く探っていくと、イーサフレームのバッファリングやIPパケットの構築、UDPパケットの抽出などの処理が行われていますがpingの応答のコードは入っていませんでした。
これらのコードも紹介しようと思ったのですが、複雑で見るだけでうんざりするので、紹介しません。
もしご興味がありましたら、
などを見て下さい。
こちらのスイッチをオンにするとIPv4パケットが直接取得できそうです。
実際にやってみました。
「NI USRP-2954で10GbEを動かしてみる」で紹介した "Getting Started (Loopback Test).vi"を動かしてみます。
まず何も改変せず、通常の状態。ループバック接続なので、インクリメントしたデータを送信し受信しました。
次にFPGAの値を設定するコードを追加し、RAW Modeをオンにします。
するとヘッダらしきデータが流れてきました。
このデータを解析してみると、やはりUDP/IPパケットです。
ということは、このUDPペイロード部分をうまく活用すればUSRP間で制御なども出来ますし、生のイーサネットフレームをホストまで持ってきてlwipに接続すればTCP/IP通信も出来そうです。
というわけで、今回は10GbEのパケットの中身を見てみました。
私たちドルフィンシステムは、お客様の様々な要望に答えられるような知見の蓄積・環境の構築を行い、最適な無線システムを提案していけるよう努力しております。
SDRを用いた無線システムのご要望はドルフィンシステムへ。
以上、ドルフィンシステム福島でした。
今回は2020/02/03の続きです。
以前10GbEイーサネットを有効にしたNI USRP-2954Rでpingが返ってこない?ところまで確認しました。今日はその原因をFPGAソースコードを見て探ってみます。
ソースコードを探ってネットワークフレームがどのように処理されるか見る
まずFPGA側のトップレベル(TenGbE_FPGA.vi)を見てみます。以下は、前々回でもお見せしましたが、PORT 0 の処理です。
SFP+コネクタでのイーサネットフレーム送受信を行っている部分ですね。
実際には、RxやTxと書かれているVI内で処理が行われています。
開いてみるとこのようになっています。
右側半分の最終出力は"debug data"となっており処理には関係ないので、画像に入っていません。
左端の端子からイーサネットが受信したデータが入ってきて、Host Rx FIFOへの書き込んでソフトにデータを渡すところまでが一連の流れのようです。
左端の端子は、恐らくイーサネットコントローラーからの生のデータ(イーサネットフレーム)が流れてきていると思われます。
その次のVIの中では、MACアドレスなどの抽出が行われARPコマンドの応答処理が実装されています。出力しているのは"MAC Data Stream"なのでイーサネットフレームが出ていると思いきや、実際にはIPv4パケットが出てきます。
更にその次のVIが出力しているのは、IPv4ヘッダ情報などが解析されたIPv4パケットが出てきます。
更にその次のVIが出力しているのが"UDP Data Stream"となっていますので、UDPパケットです。
生のデータ→イーサネットフレーム→IPv4パケット→UDPパケット→ホストのFIFOへ
というふうに順番にパケットを解析しデータを抽出しホストに渡しているようです。
で、pingは返ってくるのか?
結論から申し上げますとpingは返ってきません。上記のVIを深く探っていくと、イーサフレームのバッファリングやIPパケットの構築、UDPパケットの抽出などの処理が行われていますがpingの応答のコードは入っていませんでした。
これらのコードも紹介しようと思ったのですが、複雑で見るだけでうんざりするので、紹介しません。
もしご興味がありましたら、
- niInstr Network ARP FPGA v1.lvlib:Stream ARP Filter.vi
- niInstr IPv4 FPGA v1.lvlib:Stream Filter IPv4.vi
- niInstr IPv4 UDP FPGA v1.lvlib:UDP Rx State Machine.vi
などを見て下さい。
生データを取得する
ソースコードを探っているうちに、"RAW Mode"を見つけました。こちらのスイッチをオンにするとIPv4パケットが直接取得できそうです。
実際にやってみました。
「NI USRP-2954で10GbEを動かしてみる」で紹介した "Getting Started (Loopback Test).vi"を動かしてみます。
まず何も改変せず、通常の状態。ループバック接続なので、インクリメントしたデータを送信し受信しました。
次にFPGAの値を設定するコードを追加し、RAW Modeをオンにします。
するとヘッダらしきデータが流れてきました。
このデータを解析してみると、やはりUDP/IPパケットです。
ということは、このUDPペイロード部分をうまく活用すればUSRP間で制御なども出来ますし、生のイーサネットフレームをホストまで持ってきてlwipに接続すればTCP/IP通信も出来そうです。
まとめ
- ping応答は実装されていないのでpingは返ってこない
- RAW Modeをオンにすることで、IPv4パケットを取得することが出来る
というわけで、今回は10GbEのパケットの中身を見てみました。
私たちドルフィンシステムは、お客様の様々な要望に答えられるような知見の蓄積・環境の構築を行い、最適な無線システムを提案していけるよう努力しております。
SDRを用いた無線システムのご要望はドルフィンシステムへ。
コメント
コメントを投稿