저는 "파이프라인" 이더넷 링크(예: 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를 구성하는 다른 방법이 있습니까?