![在 DSA 型交換器上使用 PTP 會使封包看起來失真](https://rvso.com/image/178496/%E5%9C%A8%20DSA%20%E5%9E%8B%E4%BA%A4%E6%8F%9B%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8%20PTP%20%E6%9C%83%E4%BD%BF%E5%B0%81%E5%8C%85%E7%9C%8B%E8%B5%B7%E4%BE%86%E5%A4%B1%E7%9C%9F.png)
我有一塊運行 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。我只是碰巧被它困住了,但一個具有時間戳功能的連接埠完全足以滿足我的目的。
答案1
這些 Broadcom 晶片組通常不是真正的交換機,通常所有乙太網路連接埠本身通常不是完整連接埠。
在這方面,BCM53125 似乎比便宜的主機板中的普通主機板更好,但即便如此,您可能都無法處理商用交換器和完整乙太網路連接埠的全部功能。
交換器中似乎也看不到 PTP 支持數據表,奇怪的 ethtool 顯示它(可能讓我失望了)
我懷疑您可能對如此不起眼的晶片組抱有過高的期望。