DSA 스타일 스위치에서 PTP를 사용하면 패킷이 왜곡된 것처럼 보입니다.

DSA 스타일 스위치에서 PTP를 사용하면 패킷이 왜곡된 것처럼 보입니다.

그래서 저는 BCM53125 rev4 스위치, 3개의 LAN 포트, 1개의 CPU 포트(NIC)를 포함하는 Linux 5.7.10을 실행하는 Altera Cyclone V SoC 보드를 가지고 있습니다. Distributed Switch Architecture가 사용 중이므로 내 설정은 다음과 같습니다.

                 ------- 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에 따른 페이로드 길이로 해석될 때 실제 길이와도 일치하지 않습니다. 페이로드 길이. 위 이미지의 첫 번째 패킷에 대한 자세한 설명은 다음과 같습니다.

위 내용을 설명하는 첫 번째 패킷의 세부정보

전체 세부 정보에 대한 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 하위 시스템이 어떻게든 처리할 수 없거나 예상하지 못하는 것입니다.

그래서 나는 알고 싶습니다.

  1. 이것이 LAN 포트가 아닌 eth0에 직접 연결하는 방법이라면
  2. 패킷이 왜 그렇게 심각하게 엉망인지.

어떤 면에서는 DSA를 우회하고 싶습니다. 나는 단지 그것에 갇혀 있지만 타임스탬프 기능이 있는 하나의 포트만으로도 내 목적에 충분할 것입니다.

답변1

이러한 Broadcom 칩셋은 종종 진정한 스위치가 아니며 모든 이더넷 포트가 그 자체로 완전한 포트가 아닌 경우가 많습니다.

그런 점에서 BCM53125는 저렴한 보드의 일반적인 제품보다 더 좋아 보이지만 그럼에도 불구하고 상용 스위치와 전체 이더넷 포트의 전체 기능을 처리하지 못할 수도 있습니다.

PTP 지원도 스위치에서 볼 수 없는 것 같습니다.데이터시트, 그것을 보여주는 이상한 ethtool(나를 미끄러뜨렸을 수도 있음)

내 의심은 당신이 그런 보잘것없는 칩셋에 너무 많은 것을 기대하고 있다는 것입니다.

관련 정보