BCM53125 rev4 스위치, 3개의 LAN 포트, CPU 포트(NIC)가 포함된 Linux 5.7.10을 실행하는 Altera Cyclone V SoC 보드가 있습니다. 분산 스위치 아키텍처가 사용되므로 설정은 다음과 같습니다.
------- lan1
|
eth0 (CPU) --- Switch -- lan2
|
------- lan3
이 머신에서 하드웨어 타임스탬프를 사용하여 PTP를 실행하고 싶습니다. 이제 ethtool은 eth0의 올바른 기능만 표시합니다( test 사용 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 페이로드 길이. 위 그림의 첫 번째 패킷에 대한 자세한 설명은 다음과 같습니다.
자세한 내용이 포함된 16진수 덤프도 다음과 같습니다.
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 하위 시스템은 어떻게든 처리할 수 없거나 예상하지 못합니다.
그래서 나는 알고 싶다
- LAN 포트가 아닌 eth0에 대한 직접 연결인 경우
- 패킷이 왜 그렇게 심하게 엉망이 되었습니까?
어느 정도 DSA를 우회하고 싶습니다. 나는 단지 그것으로 막혔지만 타임스탬프 기능이 있는 포트는 내 목적에 완벽하게 충분합니다.
답변1
이러한 Broadcom 칩셋은 일반적으로 진정한 스위치가 아니며, 모든 이더넷 포트가 자체적으로 완전한 포트가 아닌 경우가 많습니다.
이 점에서 BCM53125는 저렴한 가격으로 찾을 수 있는 일반 마더보드보다 더 나은 것처럼 보이지만 그럼에도 불구하고 상용 스위치와 전체 이더넷 포트의 전체 기능을 처리할 수는 없을 것입니다.
PTP 지원도 스위치에서 볼 수 없는 것 같습니다.데이터 시트, 이상한 ethtool이 그것을 보여줍니다 (아마도 나를 쫓아 버릴 것입니다)
나는 당신이 그렇게 평범하지 않은 칩셋에 대해 너무 높은 기대를 갖고 있었을 것이라고 생각합니다.