![Использование PTP на коммутаторе в стиле DSA приводит к искажению пакетов](https://rvso.com/image/178496/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20PTP%20%D0%BD%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%BC%D1%83%D1%82%D0%B0%D1%82%D0%BE%D1%80%D0%B5%20%D0%B2%20%D1%81%D1%82%D0%B8%D0%BB%D0%B5%20DSA%20%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%20%D0%BA%20%D0%B8%D1%81%D0%BA%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8E%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2.png)
Итак, у меня есть плата 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 каким-то образом не может справиться/не ожидает.
Итак, я хотел бы знать
- если это способ подключиться напрямую к eth0, а не к порту LAN и
- почему пакеты так сильно испорчены.
Я хочу, в некотором роде, обойти DSA. Я просто застрял с этим, но одного порта с возможностью временной метки было бы вполне достаточно для моих целей.
решение1
Эти чипсеты Broadcom часто не являются настоящими коммутаторами, а зачастую все порты Ethernet не являются полноценными портами как таковыми.
В этом отношении BCM53125, по-видимому, лучше обычных микросхем в более дешевых платах, но даже в этом случае вы не сможете воспользоваться всеми возможностями коммерческого коммутатора и полноценными портами Ethernet.
Поддержки PTP в коммутаторе, похоже, тоже не видно.технические паспорта, странный ethtool показывает это (может быть, проскользнул мимо меня)
Я подозреваю, что вы ожидаете слишком многого от столь скромных чипсетов.