私は、「パイプライン」イーサネットリンク(例:eth0)を介してポートベースのEthertype Marvel(DSA)フレームディスプレイプロトコルを使用してLinuxを実行しているプロセッサをイーサネットスイッチに接続し、Linuxカーネルにユーザースペースを提供する組み込みシステムを提供します。開発中です。スイッチの各ユーザーポート(lan1、lan2、lan3)ごとに別々のイーサネットリンクを提供します。
私が理解したのは、通常、プロセッサが物理ユーザポートを設定および制御できるように、プロセッサとスイッチ間のMDIOリンクと固定物理パイプ(xMIIなど)を介して行われます。
ハードウェアを受け取る前にソフトウェア開発をしたいので、MDIOリンクを「偽造」したり、一般(PHYを搭載したネットワーク)イーサネットポートでポートベースのEDSAフレームマーキングを使用するようにカーネルを設定したいと思います。その結果、フレームレイアウトは次のようになります。
7 6 5 4 3 2 1 0
. . . . . . . . .
0 +---+---+---+---+---+---+---+---+
| Ether Destination Address |
+6 +---+---+---+---+---+---+---+---+
| Ether Source Address |
+6 +---+---+---+---+---+---+---+---+ --
| Prog. DSA Ether Type [15:8] | |
+1 +---+---+---+---+---+---+---+---+ |
| Prog. DSA Ether Type [7:0] | | EDSA tag
+1 +---+---+---+---+---+---+---+---+ |
| Reserved (0x00 0x00) | |
+2 +---+---+---+---+---+---+---+---+ | --
| Mode |b29| Switch Device | | |
+1 +---+---+---+---+---+---+---+---+ | |
| Switch Port |b18|b17|b16| | |
+1 +---+---+---+---+---+---+---+---+ | | DSA tag
| PRI [2:0] |b12| VID [11:8] | | |
+1 +---+---+---+---+---+---+---+---+ | |
| VID [7:0] | | |
+1 +---+---+---+---+---+---+---+---+ -- --
| Ether Length/Type |
+2 +---+---+---+---+---+---+---+---+
. . . . . . . . .
...Switch Port
スイッチのユーザポート番号に対応します。
カーネルモジュールのドキュメントではこれが適切であると提案しており、dsa_loop
ソースdsa_loop_bdinfo
コードは.netdev = "eth0"
一部のユーザーポート("lan1".."lan4"
)にリンクされているようです。ただし、modprobe dsa_loop
カーネルに入ることはできますが、次に作成された仮想ポートデバイスは表示されません。カーネル(ディスプレイネットワークデバイスに使用しているifconfig -a
)
~# lsmod
Module Size Used by
dsa_loop 16384 0
dsa_core 118784 1 dsa_loop
これによりmodprobe dsa_loop
呼び出しが表示されますが、dsa_loop_init
呼び出しは表示されませんdsa_loop_drv_probe
。
だからいくつかの質問があるようです。
dsa_loop
モジュールがdsa_loop_init
「一般」イーサネットリンクでEDSAマーキングを実行できるように設計されていますか?- このモジュールはどのように使用するように設計されていますか?
- スイッチMDIOにアクセスせずにこれを行うようにLinuxを設定する他の方法はありますか?