xref: /OK3568_Linux_fs/kernel/Documentation/networking/dsa/b53.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun==========================================
4*4882a593SmuzhiyunBroadcom RoboSwitch Ethernet switch driver
5*4882a593Smuzhiyun==========================================
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunThe Broadcom RoboSwitch Ethernet switch family is used in quite a range of
8*4882a593SmuzhiyunxDSL router, cable modems and other multimedia devices.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunThe actual implementation supports the devices BCM5325E, BCM5365, BCM539x,
11*4882a593SmuzhiyunBCM53115 and BCM53125 as well as BCM63XX.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunImplementation details
14*4882a593Smuzhiyun======================
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunThe driver is located in ``drivers/net/dsa/b53/`` and is implemented as a
17*4882a593SmuzhiyunDSA driver; see ``Documentation/networking/dsa/dsa.rst`` for details on the
18*4882a593Smuzhiyunsubsystem and what it provides.
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunThe switch is, if possible, configured to enable a Broadcom specific 4-bytes
21*4882a593Smuzhiyunswitch tag which gets inserted by the switch for every packet forwarded to the
22*4882a593SmuzhiyunCPU interface, conversely, the CPU network interface should insert a similar
23*4882a593Smuzhiyuntag for packets entering the CPU port. The tag format is described in
24*4882a593Smuzhiyun``net/dsa/tag_brcm.c``.
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunThe configuration of the device depends on whether or not tagging is
27*4882a593Smuzhiyunsupported.
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunThe interface names and example network configuration are used according the
30*4882a593Smuzhiyunconfiguration described in the :ref:`dsa-config-showcases`.
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunConfiguration with tagging support
33*4882a593Smuzhiyun----------------------------------
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunThe tagging based configuration is desired. It is not specific to the b53
36*4882a593SmuzhiyunDSA driver and will work like all DSA drivers which supports tagging.
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunSee :ref:`dsa-tagged-configuration`.
39*4882a593Smuzhiyun
40*4882a593SmuzhiyunConfiguration without tagging support
41*4882a593Smuzhiyun-------------------------------------
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunOlder models (5325, 5365) support a different tag format that is not supported
44*4882a593Smuzhiyunyet. 539x and 531x5 require managed mode and some special handling, which is
45*4882a593Smuzhiyunalso not yet supported. The tagging support is disabled in these cases and the
46*4882a593Smuzhiyunswitch need a different configuration.
47*4882a593Smuzhiyun
48*4882a593SmuzhiyunThe configuration slightly differ from the :ref:`dsa-vlan-configuration`.
49*4882a593Smuzhiyun
50*4882a593SmuzhiyunThe b53 tags the CPU port in all VLANs, since otherwise any PVID untagged
51*4882a593SmuzhiyunVLAN programming would basically change the CPU port's default PVID and make
52*4882a593Smuzhiyunit untagged, undesirable.
53*4882a593Smuzhiyun
54*4882a593SmuzhiyunIn difference to the configuration described in :ref:`dsa-vlan-configuration`
55*4882a593Smuzhiyunthe default VLAN 1 has to be removed from the slave interface configuration in
56*4882a593Smuzhiyunsingle port and gateway configuration, while there is no need to add an extra
57*4882a593SmuzhiyunVLAN configuration in the bridge showcase.
58*4882a593Smuzhiyun
59*4882a593Smuzhiyunsingle port
60*4882a593Smuzhiyun~~~~~~~~~~~
61*4882a593SmuzhiyunThe configuration can only be set up via VLAN tagging and bridge setup.
62*4882a593SmuzhiyunBy default packages are tagged with vid 1:
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun.. code-block:: sh
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun  # tag traffic on CPU port
67*4882a593Smuzhiyun  ip link add link eth0 name eth0.1 type vlan id 1
68*4882a593Smuzhiyun  ip link add link eth0 name eth0.2 type vlan id 2
69*4882a593Smuzhiyun  ip link add link eth0 name eth0.3 type vlan id 3
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun  # The master interface needs to be brought up before the slave ports.
72*4882a593Smuzhiyun  ip link set eth0 up
73*4882a593Smuzhiyun  ip link set eth0.1 up
74*4882a593Smuzhiyun  ip link set eth0.2 up
75*4882a593Smuzhiyun  ip link set eth0.3 up
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun  # bring up the slave interfaces
78*4882a593Smuzhiyun  ip link set wan up
79*4882a593Smuzhiyun  ip link set lan1 up
80*4882a593Smuzhiyun  ip link set lan2 up
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun  # create bridge
83*4882a593Smuzhiyun  ip link add name br0 type bridge
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun  # activate VLAN filtering
86*4882a593Smuzhiyun  ip link set dev br0 type bridge vlan_filtering 1
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun  # add ports to bridges
89*4882a593Smuzhiyun  ip link set dev wan master br0
90*4882a593Smuzhiyun  ip link set dev lan1 master br0
91*4882a593Smuzhiyun  ip link set dev lan2 master br0
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun  # tag traffic on ports
94*4882a593Smuzhiyun  bridge vlan add dev lan1 vid 2 pvid untagged
95*4882a593Smuzhiyun  bridge vlan del dev lan1 vid 1
96*4882a593Smuzhiyun  bridge vlan add dev lan2 vid 3 pvid untagged
97*4882a593Smuzhiyun  bridge vlan del dev lan2 vid 1
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun  # configure the VLANs
100*4882a593Smuzhiyun  ip addr add 192.0.2.1/30 dev eth0.1
101*4882a593Smuzhiyun  ip addr add 192.0.2.5/30 dev eth0.2
102*4882a593Smuzhiyun  ip addr add 192.0.2.9/30 dev eth0.3
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun  # bring up the bridge devices
105*4882a593Smuzhiyun  ip link set br0 up
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun
108*4882a593Smuzhiyunbridge
109*4882a593Smuzhiyun~~~~~~
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun.. code-block:: sh
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun  # tag traffic on CPU port
114*4882a593Smuzhiyun  ip link add link eth0 name eth0.1 type vlan id 1
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun  # The master interface needs to be brought up before the slave ports.
117*4882a593Smuzhiyun  ip link set eth0 up
118*4882a593Smuzhiyun  ip link set eth0.1 up
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun  # bring up the slave interfaces
121*4882a593Smuzhiyun  ip link set wan up
122*4882a593Smuzhiyun  ip link set lan1 up
123*4882a593Smuzhiyun  ip link set lan2 up
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun  # create bridge
126*4882a593Smuzhiyun  ip link add name br0 type bridge
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun  # activate VLAN filtering
129*4882a593Smuzhiyun  ip link set dev br0 type bridge vlan_filtering 1
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun  # add ports to bridge
132*4882a593Smuzhiyun  ip link set dev wan master br0
133*4882a593Smuzhiyun  ip link set dev lan1 master br0
134*4882a593Smuzhiyun  ip link set dev lan2 master br0
135*4882a593Smuzhiyun  ip link set eth0.1 master br0
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun  # configure the bridge
138*4882a593Smuzhiyun  ip addr add 192.0.2.129/25 dev br0
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun  # bring up the bridge
141*4882a593Smuzhiyun  ip link set dev br0 up
142*4882a593Smuzhiyun
143*4882a593Smuzhiyungateway
144*4882a593Smuzhiyun~~~~~~~
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun.. code-block:: sh
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun  # tag traffic on CPU port
149*4882a593Smuzhiyun  ip link add link eth0 name eth0.1 type vlan id 1
150*4882a593Smuzhiyun  ip link add link eth0 name eth0.2 type vlan id 2
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun  # The master interface needs to be brought up before the slave ports.
153*4882a593Smuzhiyun  ip link set eth0 up
154*4882a593Smuzhiyun  ip link set eth0.1 up
155*4882a593Smuzhiyun  ip link set eth0.2 up
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun  # bring up the slave interfaces
158*4882a593Smuzhiyun  ip link set wan up
159*4882a593Smuzhiyun  ip link set lan1 up
160*4882a593Smuzhiyun  ip link set lan2 up
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun  # create bridge
163*4882a593Smuzhiyun  ip link add name br0 type bridge
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun  # activate VLAN filtering
166*4882a593Smuzhiyun  ip link set dev br0 type bridge vlan_filtering 1
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun  # add ports to bridges
169*4882a593Smuzhiyun  ip link set dev wan master br0
170*4882a593Smuzhiyun  ip link set eth0.1 master br0
171*4882a593Smuzhiyun  ip link set dev lan1 master br0
172*4882a593Smuzhiyun  ip link set dev lan2 master br0
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun  # tag traffic on ports
175*4882a593Smuzhiyun  bridge vlan add dev wan vid 2 pvid untagged
176*4882a593Smuzhiyun  bridge vlan del dev wan vid 1
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun  # configure the VLANs
179*4882a593Smuzhiyun  ip addr add 192.0.2.1/30 dev eth0.2
180*4882a593Smuzhiyun  ip addr add 192.0.2.129/25 dev br0
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun  # bring up the bridge devices
183*4882a593Smuzhiyun  ip link set br0 up
184