요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. SPDX-License-Identifier: GPL-2.0
===================================================================
Texas Instruments K3 AM65 CPSW NUSS switchdev based ethernet driver
===================================================================
:Version: 1.0
Port renaming
=============
In order to rename via udev::
ip -d link show dev sw0p1 | grep switchid
SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \
ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}"
Multi mac mode
==============
- The driver is operating in multi-mac mode by default, thus
working as N individual network interfaces.
Devlink configuration parameters
================================
See Documentation/networking/devlink/am65-nuss-cpsw-switch.rst
Enabling "switch"
=================
The Switch mode can be enabled by configuring devlink driver parameter
"switch_mode" to 1/true::
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
This can be done regardless of the state of Port's netdev devices - UP/DOWN, but
Port's netdev devices have to be in UP before joining to the bridge to avoid
overwriting of bridge configuration as CPSW switch driver completely reloads its
configuration when first port changes its state to UP.
When both interfaces have joined the bridge - CPSW switch driver will enable
marking packets with offload_fwd_mark flag.
All configuration is implemented via switchdev API.
Bridge setup
============
::
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
ip link add name br0 type bridge
ip link set dev br0 type bridge ageing_time 1000
ip link set dev sw0p1 up
ip link set dev sw0p2 up
ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0
[*] bridge vlan add dev br0 vid 1 pvid untagged self
[*] if vlan_filtering=1. where default_pvid=1
Note. Steps [*] are mandatory.
On/off STP
==========
::
ip link set dev BRDEV type bridge stp_state 1/0
VLAN configuration
==================
::
bridge vlan add dev br0 vid 1 pvid untagged self <---- add cpu port to VLAN 1
Note. This step is mandatory for bridge/default_pvid.
Add extra VLANs
===============
1. untagged::
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 pvid untagged master
bridge vlan add dev br0 vid 100 pvid untagged self <---- Add cpu port to VLAN100
2. tagged::
bridge vlan add dev sw0p1 vid 100 master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100
FDBs
----
FDBs are automatically added on the appropriate switch port upon detection
Manually adding FDBs::
bridge fdb add aa:bb:cc:dd:ee:ff dev sw0p1 master vlan 100
bridge fdb add aa:bb:cc:dd:ee:fe dev sw0p2 master <---- Add on all VLANs
MDBs
----
MDBs are automatically added on the appropriate switch port upon detection
Manually adding MDBs::
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent vid 100
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent <---- Add on all VLANs
Multicast flooding
==================
CPU port mcast_flooding is always on
Turning flooding on/off on switch ports:
bridge link set dev sw0p1 mcast_flood on/off
Access and Trunk port
=====================
::
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 self
ip link add link br0 name br0.100 type vlan id 100
Note. Setting PVID on Bridge device itself works only for
default VLAN (default_pvid).
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
포트 이름, multi-MAC 모드와 switch 모드
1-49이 문서는 `GPL-2.0` 라이선스를 따릅니다.
Texas Instruments K3 AM65 CPSW NUSS switchdev 기반 Ethernet 드라이버
버전 1.0
포트 이름 변경
udev로 포트 이름을 바꾸려면 먼저 `switchid`를 확인합니다.
ip -d link show dev sw0p1 | grep switchid
그다음 다음 udev 규칙을 사용합니다.
SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \
ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}"
Multi-MAC 모드
드라이버는 기본적으로 multi-MAC 모드로 동작하므로 N개의 독립적인 네트워크 인터페이스로 작동합니다.
Devlink 구성 매개변수
`Documentation/networking/devlink/am65-nuss-cpsw-switch.rst`를 참조하십시오.
switch 활성화
devlink 드라이버 매개변수 `switch_mode`를 1 또는 true로 설정하면 switch 모드를 활성화할 수 있습니다.
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
이 설정은 포트 netdev가 UP인지 DOWN인지와 관계없이 적용할 수 있습니다. 다만 포트를 bridge에 가입시키기 전에는 netdev를 UP으로 만들어야 합니다. 첫 포트가 UP으로 바뀔 때 CPSW switch 드라이버가 구성을 완전히 다시 로드하므로, 순서가 다르면 bridge 구성을 덮어쓸 수 있습니다.
두 인터페이스가 모두 bridge에 가입하면 CPSW switch 드라이버는 패킷에 `offload_fwd_mark` 플래그를 표시합니다.
모든 구성은 switchdev API로 구현됩니다.
독립 netdev에서 hardware-offloaded bridge로 전환하는 순서입니다.
.. SPDX-License-Identifier: GPL-2.0
===================================================================
Texas Instruments K3 AM65 CPSW NUSS switchdev based ethernet driver
===================================================================
:Version: 1.0
Port renaming
=============
In order to rename via udev::
ip -d link show dev sw0p1 | grep switchid
SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \
ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}"
Multi mac mode
==============
- The driver is operating in multi-mac mode by default, thus
working as N individual network interfaces.
Devlink configuration parameters
================================
See Documentation/networking/devlink/am65-nuss-cpsw-switch.rst
Enabling "switch"
=================
The Switch mode can be enabled by configuring devlink driver parameter
"switch_mode" to 1/true::
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
This can be done regardless of the state of Port's netdev devices - UP/DOWN, but
Port's netdev devices have to be in UP before joining to the bridge to avoid
overwriting of bridge configuration as CPSW switch driver completely reloads its
configuration when first port changes its state to UP.
When both interfaces have joined the bridge - CPSW switch driver will enable
marking packets with offload_fwd_mark flag.
All configuration is implemented via switchdev API.
Bridge, STP와 VLAN 구성
50-102Bridge 설정
switch 모드를 활성화하고 `br0`를 만든 뒤 ageing time을 1000으로 설정합니다. `sw0p1`과 `sw0p2`를 UP으로 만든 다음 bridge master에 가입시킵니다.
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
ip link add name br0 type bridge
ip link set dev br0 type bridge ageing_time 1000
ip link set dev sw0p1 up
ip link set dev sw0p2 up
ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0
`vlan_filtering=1`이고 `default_pvid=1`이면 CPU 포트에 VLAN 1을 PVID이자 untagged VLAN으로 추가하는 다음 단계가 필수입니다.
bridge vlan add dev br0 vid 1 pvid untagged self
STP 켜기와 끄기
ip link set dev BRDEV type bridge stp_state 1/0
VLAN 구성
bridge의 CPU 포트를 VLAN 1에 추가하는 단계는 bridge/default_pvid 구성을 위해 필수입니다.
bridge vlan add dev br0 vid 1 pvid untagged self
추가 VLAN을 untagged로 구성하는 예
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 pvid untagged master
bridge vlan add dev br0 vid 100 pvid untagged self <---- Add cpu port to VLAN100
두 switch 포트와 CPU 포트 모두 VLAN 100을 PVID이자 untagged VLAN으로 사용합니다.
추가 VLAN을 tagged로 구성하는 예
bridge vlan add dev sw0p1 vid 100 master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100
switch 포트에서는 VLAN 100의 tag를 유지하고 CPU 포트도 VLAN 100을 tagged로 가입시킵니다.
`master`는 switch 포트, `self`는 bridge의 CPU 포트에 적용됩니다.
Bridge setup
============
::
devlink dev param set platform/c000000.ethernet \
name switch_mode value true cmode runtime
ip link add name br0 type bridge
ip link set dev br0 type bridge ageing_time 1000
ip link set dev sw0p1 up
ip link set dev sw0p2 up
ip link set dev sw0p1 master br0
ip link set dev sw0p2 master br0
[*] bridge vlan add dev br0 vid 1 pvid untagged self
[*] if vlan_filtering=1. where default_pvid=1
Note. Steps [*] are mandatory.
On/off STP
==========
::
ip link set dev BRDEV type bridge stp_state 1/0
VLAN configuration
==================
::
bridge vlan add dev br0 vid 1 pvid untagged self <---- add cpu port to VLAN 1
Note. This step is mandatory for bridge/default_pvid.
Add extra VLANs
===============
1. untagged::
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 pvid untagged master
bridge vlan add dev br0 vid 100 pvid untagged self <---- Add cpu port to VLAN100
2. tagged::
bridge vlan add dev sw0p1 vid 100 master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100
FDB, MDB, multicast와 access/trunk 포트
103-143FDB
FDB 항목은 주소를 감지하면 적절한 switch 포트에 자동으로 추가됩니다. 수동으로 추가할 수도 있습니다.
bridge fdb add aa:bb:cc:dd:ee:ff dev sw0p1 master vlan 100
bridge fdb add aa:bb:cc:dd:ee:fe dev sw0p2 master
첫 명령은 VLAN 100에만 항목을 추가하고, 두 번째 명령은 모든 VLAN에 추가합니다.
MDB
MDB 항목도 multicast group을 감지하면 적절한 switch 포트에 자동으로 추가됩니다. 수동 추가 예는 다음과 같습니다.
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent vid 100
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent
첫 명령은 VLAN 100에만 group을 추가하고, 두 번째 명령은 모든 VLAN에 추가합니다.
Multicast flooding
CPU 포트의 `mcast_flooding`은 항상 켜져 있습니다. switch 포트에서는 다음 명령으로 flooding을 켜거나 끕니다.
bridge link set dev sw0p1 mcast_flood on/off
Access 및 trunk 포트
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 self
ip link add link br0 name br0.100 type vlan id 100
`sw0p1`은 VLAN 100의 untagged access 포트이고 `sw0p2`는 tagged trunk 포트입니다. CPU 포트를 VLAN 100에 가입시키고 `br0.100` VLAN 인터페이스를 만듭니다. Bridge 장치 자체에 PVID를 설정하는 것은 기본 VLAN인 `default_pvid`에만 적용됩니다.
FDBs
----
FDBs are automatically added on the appropriate switch port upon detection
Manually adding FDBs::
bridge fdb add aa:bb:cc:dd:ee:ff dev sw0p1 master vlan 100
bridge fdb add aa:bb:cc:dd:ee:fe dev sw0p2 master <---- Add on all VLANs
MDBs
----
MDBs are automatically added on the appropriate switch port upon detection
Manually adding MDBs::
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent vid 100
bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent <---- Add on all VLANs
Multicast flooding
==================
CPU port mcast_flooding is always on
Turning flooding on/off on switch ports:
bridge link set dev sw0p1 mcast_flood on/off
Access and Trunk port
=====================
::
bridge vlan add dev sw0p1 vid 100 pvid untagged master
bridge vlan add dev sw0p2 vid 100 master
bridge vlan add dev br0 vid 100 self
ip link add link br0 name br0.100 type vlan id 100
Note. Setting PVID on Bridge device itself works only for
default VLAN (default_pvid).
요약·해설
am65_nuss_cpsw_switchdev.rst:1-143AM65 CPSW NUSS는 기본적으로 포트별 독립 netdev를 제공하는 multi-MAC 모드로 시작합니다. `switch_mode=true`로 전환한 뒤 포트를 먼저 UP으로 만들고 bridge에 가입시켜야 첫 포트의 재구성 과정이 bridge 설정을 덮어쓰지 않습니다.
모드 전환과 bridge offload에 필요한 순서입니다.
주소 유형별 Linux bridge 명령입니다.