在 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 显示它(可能让我失望了)

我怀疑您可能对如此不起眼的芯片组抱有过高的期望。

相关内容