Использование PTP на коммутаторе в стиле DSA приводит к искажению пакетов

Использование PTP на коммутаторе в стиле DSA приводит к искажению пакетов

Итак, у меня есть плата Altera Cyclone V SoC под управлением Linux 5.7.10, содержащая коммутатор 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 и его возможности для связи?

Я попробовал настроить мост и, в качестве альтернативы, IP-адреса для каждого порта LAN, как описаноздесь. Затем я запускаю PTP-мастер на плате, используя eth0 в качестве сетевого интерфейса:

# ./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 (например, 0x8000 для IP) в заголовке Ethernet, но вместо этого есть значения вроде 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 часто не являются настоящими коммутаторами, а зачастую все порты Ethernet не являются полноценными портами как таковыми.

В этом отношении BCM53125, по-видимому, лучше обычных микросхем в более дешевых платах, но даже в этом случае вы не сможете воспользоваться всеми возможностями коммерческого коммутатора и полноценными портами Ethernet.

Поддержки PTP в коммутаторе, похоже, тоже не видно.технические паспорта, странный ethtool показывает это (может быть, проскользнул мимо меня)

Я подозреваю, что вы ожидаете слишком многого от столь скромных чипсетов.

Связанный контент