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