在 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 子系統不知何故無法處理/沒有預料到。
所以,我想知道
- 如果這是直接連接到 eth0 的方法,而不是 LAN 埠和
- 為什麼數據包如此嚴重地混亂。
在某種程度上,我想繞過 DSA。我只是碰巧被它困住了,但是一個具有時間戳功能的埠完全可以滿足我的目的。
那些 Broadcom 晶片組通常不是真正的交換機,而且通常所有乙太網埠本身通常都不是完整埠。
在這方面,BCM53125 似乎比便宜板上的普通產品更好,但即便如此,你們可能都沒有處理商業交換機和完整乙太網埠的全部功能。
PTP 支持似乎在交換機數據表中也無處可見,奇怪的 ethtool 顯示它(可能讓我滑倒了)
我懷疑您可能對這種不起眼的晶片組期望過高。