OpenWrt上のDGS-1210-28、ポート24-28にSFPを挿しても何も変わらず銅側がリンクを維持する
ホームラボのスイッチです。純正Web UIとの戦いをやめたくて、D-Link DGS-1210-28 リビジョンF1をOpenWrtに書き換えました。銅/ファイバーのコンボポートである最後の4ポートを除いて、すべて動いています。
- スイッチ: D-Link DGS-1210-28 rev F1
- ファームウェア: OpenWrt 21.02.0-rc3(r16172-2aba3e9784)
- ポート24-28: RTL8214FC PHY配下のRJ45/SFPコンボ(残りはRTL8218B/RTL8218D)
- モジュール: 別のスイッチでは問題なくリンクするジェネリックな1Gオプティクス
ケージに何を挿しても、ポートは普通のRJ45ポートとして振る舞います。銅側が選択されたままで、ファイバー側は一度も上がってきません。
# ethtool lan28
Supported ports: [ TP MII FIBRE ]
Port: MII
Link detected: yes
ブートログには、これらのポートがRTL8214FCコンボPHYドライバに紐付いていることが表示されていて、そのドライバはSFPを認識するはずなので、ハードウェア側は問題なさそうです。
これまで試したこと:
- モジュールを挿し直し、2つ目のものも試した
- 優先順位の問題かと思い、銅側のケーブルを完全に抜いてみた - ポートは銅側のままだった
- モジュールを別のスイッチに移すとそちらではリンクする
純正ファームウェアのときは、このスイッチはモジュールを挿した瞬間に自分でポートをファイバー側に切り替えてくれていました。このビルドで媒体を選択する方法はあるのでしょうか、それともコンボポートはまだ使えないというだけなのでしょうか。
Comments 3
何も壊れていません。realtekターゲットには自動の媒体選択がそもそもないだけです。RTL8214FCは銅側とファイバー側を持つコンボPHYで、このファームウェアでは何かに指示されない限りMII/銅側のままです。モジュールを挿してもドライバにとっては何の意味もありません。切り替え処理を誰も実装していないので。
媒体はユーザースペースから自分で選択します。
これでそのポートのアクティブな媒体はケージになり、オプティクスが上がってきます。ポートをRJ45側に戻すには。
他のコンボポートも1つずつ同じ呼び出しを行います。
純正ファームウェアで覚えていたのは限定的な自動選択で、両方の半分を見て、両方にリンクがあれば銅側が勝つというものでした。だからこれは退行のように見えますが、実際は違います。この機能はこのターゲット向けに単に書かれたことがなかっただけです。
注意点は2つです。これはCLI限定でLuCIには出てきません。それを求める声は以前からあります。それと、このビルドでは何も自動で媒体を選んでくれないので、毎回の起動後にファイバーにしたいなら、その呼び出しが確実に実行されるようにしてください。
それでした、ありがとうございます。1回の呼び出しでポートが切り替わりました。
オプティクスはすぐに上がってきて、RJ45側は静かになりました。他の3つのコンボポートにも同じことをして、4つの呼び出しをスタートアップスクリプトに入れました。おっしゃるとおり何もこの選択を覚えていてくれないので。
ポートごとのトグルをシェルスクリプトに書かなければいけないのはちょっと苛立ちますが、ポートは今使える状態になりました。それが必要だったことです。
これらのポートの上に監視を組む前に知っておく価値があります。これらのボードのSFP側のリンク状態は必ずしも信頼できません。DGS-1210-10Pではデバイスツリーにsfpノードが一切なく、カーネルはmodule-presentもloss-of-signalも受け取れず、MACは常にキャリアありと報告します。
ip linkは空のケージのlan9に対して<BROADCAST,MULTICAST,UP,LOWER_UP>を表示し、GLC-T-CO銅SFPを挿してパッチコードなしの状態でもupのままです。DGS-1210-10MPはそうならず、そのDTSにはすでにノードが入っています。そこでの修正は、10MPとZyxel GS1900-10HPを手本にしたデバイスツリーの変更でした。ケージごとのi2c-gpioバス、los-gpio、mod-def0-gpio、tx-disable-gpioを持つケージごとのsfpノード、ポートから参照される
sfp = <&sfp0>、phy-mode = "1000base-x"、managed = "in-band-status"です。これが入るとケージはI2C経由でプローブされ、キャリアがようやく実際の光信号を追いかけるようになります。その時期の純正イメージではこの挙動が残っているので、コンボポートやSFPポートでキャリアを見ている仕組みがあるなら、ファイバーを抜いたときに実際にそれが落ちるか確認してください。