在 DSA 型交換器上使用 PTP 會使封包看起來失真

在 DSA 型交換器上使用 PTP 會使封包看起來失真

我有一塊運行 Linux 5.7.10 的 Altera Cyclone V SoC 板,其中包含一個 BCM53125 rev4 交換器、三個 LAN 連接埠和一個 CPU 連接埠(NIC)。正在使用分散式交換器架構,因此我的設定如下:

                 ------- 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 解釋為有效負載長度時,這些值甚至與真實的負載長度不匹配有效負載長度。以下是上圖中第一個資料包的詳細描述:

第一個資料包的詳細資訊闡述了上述內容

這也是一個十六進制轉儲,包含全部詳細資訊:

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 子系統不知何故無法處理/不期望這樣做。

所以,我想知道

  1. 如果這是直接連接到 eth0 的方法,而不是 LAN 端口,並且
  2. 為什麼資料包如此嚴重混亂。

在某種程度上,我想規避 DSA。我只是碰巧被它困住了,但一個具有時間戳功能的連接埠完全足以滿足我的目的。

答案1

這些 Broadcom 晶片組通常不是真正的交換機,通常所有乙太網路連接埠本身通常不是完整連接埠。

在這方面,BCM53125 似乎比便宜的主機板中的普通主機板更好,但即便如此,您可能都無法處理商用交換器和完整乙太網路連接埠的全部功能。

交換器中似乎也看不到 PTP 支持數據表,奇怪的 ethtool 顯示它(可能讓我失望了)

我懷疑您可能對如此不起眼的晶片組抱有過高的期望。

相關內容