我有一块运行 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 显示它(可能让我失望了)
我怀疑您可能对如此不起眼的芯片组抱有过高的期望。