![DSA スタイルのスイッチで PTP を使用するとパケットが歪んで見える](https://rvso.com/image/178496/DSA%20%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%81%A7%20PTP%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%81%8C%E6%AD%AA%E3%82%93%E3%81%A7%E8%A6%8B%E3%81%88%E3%82%8B.png)
私は、BCM53125 rev4 スイッチ、3 つの LAN ポート、および 1 つの CPU ポート (NIC) を含む Linux 5.7.10 を実行する Altera Cyclone V SoC ボードを持っています。分散スイッチ アーキテクチャを使用しているため、セットアップは次のようになります。
------- lan1
|
eth0 (CPU) --- Switch -- lan2
|
------- lan3
このマシンでハードウェアタイムスタンプ付きのPTPを実行したいのですが、現在、ethtoolはeth0の正しい機能(を使用してテスト済みethtool -T eth0
)のみを表示します。つまり、
# ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
ptpv1-l4-event (HWTSTAMP_FILTER_PTP_V1_L4_EVENT)
ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
ptpv2-l4-event (HWTSTAMP_FILTER_PTP_V2_L4_EVENT)
ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT)
ptpv2-sync (HWTSTAMP_FILTER_PTP_V2_SYNC)
ptpv2-delay-req (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
lan1 および仲間の場合は失敗します:
# ethtool -T lan1
Time stamping parameters for lan1:
Cannot get device time stamping settings: Operation not supported
そこで質問なのですが、eth0 とその機能を通信にどのように使用できるのでしょうか?
ブリッジを設定し、代わりに各LANポートにIPアドレスを設定してみました。ここ次に、ネットワーク インターフェイスとして eth0 を使用して、ボード上で PTP マスターを起動します。
# ./ptp4l -qmi eth0
ptp4l[3658.796]: selected /dev/ptp0 as PTP clock
ptp4l[3658.807]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[3658.807]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[3666.525]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[3666.525]: selected local clock 664975.fffe.e52d47 as best master
ptp4l[3666.525]: port 1: assuming the grand master role
問題は報告されていません。ただし、Wireshark を使用していくつかのパケットをキャプチャすると、それらのパケットは PTP とはまったく似ていません。
それだけでなく、イーサネット ヘッダーには EtherType (IP の場合は 0x8000 など) がなく、代わりに 0x0048 や 0x005c などの値があり、これを IEEE 802.3 に従ってペイロード長として解釈すると、実際のペイロード長と一致しません。上の画像の最初のパケットの詳細な説明は次のとおりです。
完全な詳細範囲については、16 進ダンプも示します。
01 00 5e 00 01 81 66 49 75 e5 2d 47 00 5c 02 48
40 00 01 11 8a 4d 0a 00 01 7b e0 00 01 81 01 40
01 40 00 48 06 d3 0b 02 00 40 00 00 00 08 00 00
00 00 00 00 00 00 00 00 00 00 66 49 75 ff fe e5
2d 47 00 01 00 00 05 01 00 00 00 00 00 00 00 00
00 00 00 25 00 80 f8 fe ff ff 80 66 49 75 ff fe
e5 2d 47 00 00 a0
つまり、リンク層で何らかの理由ですでに問題が発生しているのです。私の推測では、PTP マスターを CPU ポートに接続したことが原因だと思いますが、DSA サブシステムはこれを何らかの理由で処理できないか、予期していません。
そこで、私は知りたいのです
- これがLANポートではなくeth0に直接接続する方法である場合、
- なぜパケットがひどく乱れているのか。
ある意味で、DSA を回避したいと思っています。たまたま DSA にこだわっているのですが、タイムスタンプ機能を備えた 1 つのポートがあれば、私の目的には十分です。
答え1
これらの Broadcom チップセットは、真のスイッチではないことが多く、すべてのイーサネット ポートが完全なポートではないこともよくあります。
その点では、BCM53125 は安価なボードに搭載されている通常のものよりも優れているように見えますが、それでも、商用スイッチの全機能と完全なイーサネット ポートの両方を扱えない可能性があります。
PTPサポートもスイッチには見当たらないようですデータシート、奇妙な ethtool がそれを示しています (見逃した可能性があります)
このような質素なチップセットに期待しすぎているのではないかと思います。