외부 세계에 대한 실제 PHY 연결이 있는 이더넷 포트에서 Ethertype DSA VLAN 태깅을 구성할 수 있습니까?

외부 세계에 대한 실제 PHY 연결이 있는 이더넷 포트에서 Ethertype DSA VLAN 태깅을 구성할 수 있습니까?

저는 "파이프라인" 이더넷 링크(예: eth0)를 통해 포트 기반 Ethertype DSA(Marvell) 프레임 표시 프로토콜을 사용하여 Linux를 실행하는 프로세서를 이더넷 스위치에 연결하여 Linux 커널이 사용자 공간을 제공하도록 하는 임베디드 시스템을 개발 중입니다. 스위치의 각 사용자 포트(예: lan1, lan2, lan3)에 대해 별도의 이더넷 링크를 제공합니다.

내가 이해한 바로는 이는 일반적으로 프로세서가 물리적 사용자 포트를 구성하고 제어할 수 있도록 프로세서와 스위치 사이의 MDIO 링크와 고정된 물리적 파이프(예: xMII)를 통해 수행됩니다.

하드웨어를 받기 전에 소프트웨어 개발을 좀 하고 싶기 때문에 MDIO 링크를 "위조"하거나 일반(PHY가 장착된 네트워크) 이더넷 포트에서 포트 기반 EDSA 프레임 표시를 사용하도록 커널을 구성하고 싶습니다. 결과적으로 프레임 레이아웃은 다음과 같습니다.

         7   6   5   4   3   2   1   0  
       .   .   .   .   .   .   .   .   .
     0 +---+---+---+---+---+---+---+---+
       |   Ether Destination Address   |
    +6 +---+---+---+---+---+---+---+---+
       |     Ether Source Address      |
    +6 +---+---+---+---+---+---+---+---+  --
       |  Prog. DSA Ether Type [15:8]  |  |
    +1 +---+---+---+---+---+---+---+---+  |
       |  Prog. DSA Ether Type [7:0]   |  | EDSA tag
    +1 +---+---+---+---+---+---+---+---+  |
       |     Reserved (0x00 0x00)      |  |
    +2 +---+---+---+---+---+---+---+---+  |  --
       | Mode  |b29|   Switch Device   |  |  |
    +1 +---+---+---+---+---+---+---+---+  |  |
       |    Switch Port    |b18|b17|b16|  |  |
    +1 +---+---+---+---+---+---+---+---+  |  | DSA tag
       | PRI [2:0] |b12|  VID [11:8]   |  |  |
    +1 +---+---+---+---+---+---+---+---+  |  |
       |           VID [7:0]           |  |  |
    +1 +---+---+---+---+---+---+---+---+  -- --
       |       Ether Length/Type       |
    +2 +---+---+---+---+---+---+---+---+
       .   .   .   .   .   .   .   .   .

... Switch Port스위치의 사용자 포트 번호에 해당합니다.

커널 모듈에 대한 문서에서는 이것이 적합할 수 있다고 제안 dsa_loop하고 dsa_loop_bdinfo있으며 소스 코드는 .netdev = "eth0"일부 사용자 포트( "lan1".."lan4")에 링크되어 있는 것처럼 보입니다. 그러나 modprobe dsa_loop커널에 들어갈 수는 있지만 다음에서 생성된 가상 포트 장치는 표시되지 않습니다. 커널(디스플레이 네트워크 장치에 사용하고 있음 ifconfig -a)

    ~# lsmod
    Module                  Size  Used by
    dsa_loop               16384  0
    dsa_core              118784  1 dsa_loop

이렇게 하면 modprobe dsa_loop에 대한 호출이 표시되지만 dsa_loop_init에 대한 호출은 표시되지 않습니다 dsa_loop_drv_probe.

그래서 몇 가지 질문이 있는 것 같습니다.

  • dsa_loop모듈이 dsa_loop_init"일반" 이더넷 링크에서 EDSA 마킹을 수행할 수 있도록 설계되었습니까?
  • 이 모듈은 어떻게 사용되도록 설계되었나요?
  • 스위치 MDIO에 액세스하지 않고 이를 수행하도록 Linux를 구성하는 다른 방법이 있습니까?

관련 정보