158dd7a8dSBenedikt Spranger.. SPDX-License-Identifier: GPL-2.0 258dd7a8dSBenedikt Spranger 358dd7a8dSBenedikt Spranger======================================= 458dd7a8dSBenedikt SprangerDSA switch configuration from userspace 558dd7a8dSBenedikt Spranger======================================= 658dd7a8dSBenedikt Spranger 758dd7a8dSBenedikt SprangerThe DSA switch configuration is not integrated into the main userspace 858dd7a8dSBenedikt Sprangernetwork configuration suites by now and has to be performed manualy. 958dd7a8dSBenedikt Spranger 1058dd7a8dSBenedikt Spranger.. _dsa-config-showcases: 1158dd7a8dSBenedikt Spranger 1258dd7a8dSBenedikt SprangerConfiguration showcases 1358dd7a8dSBenedikt Spranger----------------------- 1458dd7a8dSBenedikt Spranger 1558dd7a8dSBenedikt SprangerTo configure a DSA switch a couple of commands need to be executed. In this 1658dd7a8dSBenedikt Sprangerdocumentation some common configuration scenarios are handled as showcases: 1758dd7a8dSBenedikt Spranger 1858dd7a8dSBenedikt Spranger*single port* 1958dd7a8dSBenedikt Spranger Every switch port acts as a different configurable Ethernet port 2058dd7a8dSBenedikt Spranger 2158dd7a8dSBenedikt Spranger*bridge* 2258dd7a8dSBenedikt Spranger Every switch port is part of one configurable Ethernet bridge 2358dd7a8dSBenedikt Spranger 2458dd7a8dSBenedikt Spranger*gateway* 2558dd7a8dSBenedikt Spranger Every switch port except one upstream port is part of a configurable 2658dd7a8dSBenedikt Spranger Ethernet bridge. 2758dd7a8dSBenedikt Spranger The upstream port acts as different configurable Ethernet port. 2858dd7a8dSBenedikt Spranger 2958dd7a8dSBenedikt SprangerAll configurations are performed with tools from iproute2, which is available 3058dd7a8dSBenedikt Sprangerat https://www.kernel.org/pub/linux/utils/net/iproute2/ 3158dd7a8dSBenedikt Spranger 3258dd7a8dSBenedikt SprangerThrough DSA every port of a switch is handled like a normal linux Ethernet 3358dd7a8dSBenedikt Sprangerinterface. The CPU port is the switch port connected to an Ethernet MAC chip. 3458dd7a8dSBenedikt SprangerThe corresponding linux Ethernet interface is called the master interface. 3558dd7a8dSBenedikt SprangerAll other corresponding linux interfaces are called slave interfaces. 3658dd7a8dSBenedikt Spranger 3758dd7a8dSBenedikt SprangerThe slave interfaces depend on the master interface. They can only brought up, 3858dd7a8dSBenedikt Sprangerwhen the master interface is up. 3958dd7a8dSBenedikt Spranger 4058dd7a8dSBenedikt SprangerIn this documentation the following Ethernet interfaces are used: 4158dd7a8dSBenedikt Spranger 4258dd7a8dSBenedikt Spranger*eth0* 4358dd7a8dSBenedikt Spranger the master interface 4458dd7a8dSBenedikt Spranger 4558dd7a8dSBenedikt Spranger*lan1* 4658dd7a8dSBenedikt Spranger a slave interface 4758dd7a8dSBenedikt Spranger 4858dd7a8dSBenedikt Spranger*lan2* 4958dd7a8dSBenedikt Spranger another slave interface 5058dd7a8dSBenedikt Spranger 5158dd7a8dSBenedikt Spranger*lan3* 5258dd7a8dSBenedikt Spranger a third slave interface 5358dd7a8dSBenedikt Spranger 5458dd7a8dSBenedikt Spranger*wan* 5558dd7a8dSBenedikt Spranger A slave interface dedicated for upstream traffic 5658dd7a8dSBenedikt Spranger 5758dd7a8dSBenedikt SprangerFurther Ethernet interfaces can be configured similar. 5858dd7a8dSBenedikt SprangerThe configured IPs and networks are: 5958dd7a8dSBenedikt Spranger 6058dd7a8dSBenedikt Spranger*single port* 6158dd7a8dSBenedikt Spranger * lan1: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3) 6258dd7a8dSBenedikt Spranger * lan2: 192.0.2.5/30 (192.0.2.4 - 192.0.2.7) 6358dd7a8dSBenedikt Spranger * lan3: 192.0.2.9/30 (192.0.2.8 - 192.0.2.11) 6458dd7a8dSBenedikt Spranger 6558dd7a8dSBenedikt Spranger*bridge* 6658dd7a8dSBenedikt Spranger * br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255) 6758dd7a8dSBenedikt Spranger 6858dd7a8dSBenedikt Spranger*gateway* 6958dd7a8dSBenedikt Spranger * br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255) 7058dd7a8dSBenedikt Spranger * wan: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3) 7158dd7a8dSBenedikt Spranger 7258dd7a8dSBenedikt Spranger.. _dsa-tagged-configuration: 7358dd7a8dSBenedikt Spranger 7458dd7a8dSBenedikt SprangerConfiguration with tagging support 7558dd7a8dSBenedikt Spranger---------------------------------- 7658dd7a8dSBenedikt Spranger 7758dd7a8dSBenedikt SprangerThe tagging based configuration is desired and supported by the majority of 7858dd7a8dSBenedikt SprangerDSA switches. These switches are capable to tag incoming and outgoing traffic 7958dd7a8dSBenedikt Sprangerwithout using a VLAN based configuration. 8058dd7a8dSBenedikt Spranger 81*e322bacbSVladimir Oltean*single port* 8258dd7a8dSBenedikt Spranger .. code-block:: sh 8358dd7a8dSBenedikt Spranger 8458dd7a8dSBenedikt Spranger # configure each interface 8558dd7a8dSBenedikt Spranger ip addr add 192.0.2.1/30 dev lan1 8658dd7a8dSBenedikt Spranger ip addr add 192.0.2.5/30 dev lan2 8758dd7a8dSBenedikt Spranger ip addr add 192.0.2.9/30 dev lan3 8858dd7a8dSBenedikt Spranger 8958dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 9058dd7a8dSBenedikt Spranger ip link set eth0 up 9158dd7a8dSBenedikt Spranger 9258dd7a8dSBenedikt Spranger # bring up the slave interfaces 9358dd7a8dSBenedikt Spranger ip link set lan1 up 9458dd7a8dSBenedikt Spranger ip link set lan2 up 9558dd7a8dSBenedikt Spranger ip link set lan3 up 9658dd7a8dSBenedikt Spranger 97*e322bacbSVladimir Oltean*bridge* 9858dd7a8dSBenedikt Spranger .. code-block:: sh 9958dd7a8dSBenedikt Spranger 10058dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 10158dd7a8dSBenedikt Spranger ip link set eth0 up 10258dd7a8dSBenedikt Spranger 10358dd7a8dSBenedikt Spranger # bring up the slave interfaces 10458dd7a8dSBenedikt Spranger ip link set lan1 up 10558dd7a8dSBenedikt Spranger ip link set lan2 up 10658dd7a8dSBenedikt Spranger ip link set lan3 up 10758dd7a8dSBenedikt Spranger 10858dd7a8dSBenedikt Spranger # create bridge 10958dd7a8dSBenedikt Spranger ip link add name br0 type bridge 11058dd7a8dSBenedikt Spranger 11158dd7a8dSBenedikt Spranger # add ports to bridge 11258dd7a8dSBenedikt Spranger ip link set dev lan1 master br0 11358dd7a8dSBenedikt Spranger ip link set dev lan2 master br0 11458dd7a8dSBenedikt Spranger ip link set dev lan3 master br0 11558dd7a8dSBenedikt Spranger 11658dd7a8dSBenedikt Spranger # configure the bridge 11758dd7a8dSBenedikt Spranger ip addr add 192.0.2.129/25 dev br0 11858dd7a8dSBenedikt Spranger 11958dd7a8dSBenedikt Spranger # bring up the bridge 12058dd7a8dSBenedikt Spranger ip link set dev br0 up 12158dd7a8dSBenedikt Spranger 122*e322bacbSVladimir Oltean*gateway* 12358dd7a8dSBenedikt Spranger .. code-block:: sh 12458dd7a8dSBenedikt Spranger 12558dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 12658dd7a8dSBenedikt Spranger ip link set eth0 up 12758dd7a8dSBenedikt Spranger 12858dd7a8dSBenedikt Spranger # bring up the slave interfaces 12958dd7a8dSBenedikt Spranger ip link set wan up 13058dd7a8dSBenedikt Spranger ip link set lan1 up 13158dd7a8dSBenedikt Spranger ip link set lan2 up 13258dd7a8dSBenedikt Spranger 13358dd7a8dSBenedikt Spranger # configure the upstream port 13458dd7a8dSBenedikt Spranger ip addr add 192.0.2.1/30 dev wan 13558dd7a8dSBenedikt Spranger 13658dd7a8dSBenedikt Spranger # create bridge 13758dd7a8dSBenedikt Spranger ip link add name br0 type bridge 13858dd7a8dSBenedikt Spranger 13958dd7a8dSBenedikt Spranger # add ports to bridge 14058dd7a8dSBenedikt Spranger ip link set dev lan1 master br0 14158dd7a8dSBenedikt Spranger ip link set dev lan2 master br0 14258dd7a8dSBenedikt Spranger 14358dd7a8dSBenedikt Spranger # configure the bridge 14458dd7a8dSBenedikt Spranger ip addr add 192.0.2.129/25 dev br0 14558dd7a8dSBenedikt Spranger 14658dd7a8dSBenedikt Spranger # bring up the bridge 14758dd7a8dSBenedikt Spranger ip link set dev br0 up 14858dd7a8dSBenedikt Spranger 14958dd7a8dSBenedikt Spranger.. _dsa-vlan-configuration: 15058dd7a8dSBenedikt Spranger 15158dd7a8dSBenedikt SprangerConfiguration without tagging support 15258dd7a8dSBenedikt Spranger------------------------------------- 15358dd7a8dSBenedikt Spranger 15458dd7a8dSBenedikt SprangerA minority of switches are not capable to use a taging protocol 15558dd7a8dSBenedikt Spranger(DSA_TAG_PROTO_NONE). These switches can be configured by a VLAN based 15658dd7a8dSBenedikt Sprangerconfiguration. 15758dd7a8dSBenedikt Spranger 158*e322bacbSVladimir Oltean*single port* 15958dd7a8dSBenedikt Spranger The configuration can only be set up via VLAN tagging and bridge setup. 16058dd7a8dSBenedikt Spranger 16158dd7a8dSBenedikt Spranger .. code-block:: sh 16258dd7a8dSBenedikt Spranger 16358dd7a8dSBenedikt Spranger # tag traffic on CPU port 16458dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.1 type vlan id 1 16558dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.2 type vlan id 2 16658dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.3 type vlan id 3 16758dd7a8dSBenedikt Spranger 16858dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 16958dd7a8dSBenedikt Spranger ip link set eth0 up 17058dd7a8dSBenedikt Spranger ip link set eth0.1 up 17158dd7a8dSBenedikt Spranger ip link set eth0.2 up 17258dd7a8dSBenedikt Spranger ip link set eth0.3 up 17358dd7a8dSBenedikt Spranger 17458dd7a8dSBenedikt Spranger # bring up the slave interfaces 17558dd7a8dSBenedikt Spranger ip link set lan1 up 176af0ae997SPaul Barker ip link set lan2 up 17758dd7a8dSBenedikt Spranger ip link set lan3 up 17858dd7a8dSBenedikt Spranger 17958dd7a8dSBenedikt Spranger # create bridge 18058dd7a8dSBenedikt Spranger ip link add name br0 type bridge 18158dd7a8dSBenedikt Spranger 18258dd7a8dSBenedikt Spranger # activate VLAN filtering 18358dd7a8dSBenedikt Spranger ip link set dev br0 type bridge vlan_filtering 1 18458dd7a8dSBenedikt Spranger 18558dd7a8dSBenedikt Spranger # add ports to bridges 18658dd7a8dSBenedikt Spranger ip link set dev lan1 master br0 18758dd7a8dSBenedikt Spranger ip link set dev lan2 master br0 18858dd7a8dSBenedikt Spranger ip link set dev lan3 master br0 18958dd7a8dSBenedikt Spranger 19058dd7a8dSBenedikt Spranger # tag traffic on ports 19158dd7a8dSBenedikt Spranger bridge vlan add dev lan1 vid 1 pvid untagged 19258dd7a8dSBenedikt Spranger bridge vlan add dev lan2 vid 2 pvid untagged 19358dd7a8dSBenedikt Spranger bridge vlan add dev lan3 vid 3 pvid untagged 19458dd7a8dSBenedikt Spranger 19558dd7a8dSBenedikt Spranger # configure the VLANs 19658dd7a8dSBenedikt Spranger ip addr add 192.0.2.1/30 dev eth0.1 19758dd7a8dSBenedikt Spranger ip addr add 192.0.2.5/30 dev eth0.2 19858dd7a8dSBenedikt Spranger ip addr add 192.0.2.9/30 dev eth0.3 19958dd7a8dSBenedikt Spranger 20058dd7a8dSBenedikt Spranger # bring up the bridge devices 20158dd7a8dSBenedikt Spranger ip link set br0 up 20258dd7a8dSBenedikt Spranger 20358dd7a8dSBenedikt Spranger 204*e322bacbSVladimir Oltean*bridge* 20558dd7a8dSBenedikt Spranger .. code-block:: sh 20658dd7a8dSBenedikt Spranger 20758dd7a8dSBenedikt Spranger # tag traffic on CPU port 20858dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.1 type vlan id 1 20958dd7a8dSBenedikt Spranger 21058dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 21158dd7a8dSBenedikt Spranger ip link set eth0 up 21258dd7a8dSBenedikt Spranger ip link set eth0.1 up 21358dd7a8dSBenedikt Spranger 21458dd7a8dSBenedikt Spranger # bring up the slave interfaces 21558dd7a8dSBenedikt Spranger ip link set lan1 up 21658dd7a8dSBenedikt Spranger ip link set lan2 up 21758dd7a8dSBenedikt Spranger ip link set lan3 up 21858dd7a8dSBenedikt Spranger 21958dd7a8dSBenedikt Spranger # create bridge 22058dd7a8dSBenedikt Spranger ip link add name br0 type bridge 22158dd7a8dSBenedikt Spranger 22258dd7a8dSBenedikt Spranger # activate VLAN filtering 22358dd7a8dSBenedikt Spranger ip link set dev br0 type bridge vlan_filtering 1 22458dd7a8dSBenedikt Spranger 22558dd7a8dSBenedikt Spranger # add ports to bridge 22658dd7a8dSBenedikt Spranger ip link set dev lan1 master br0 22758dd7a8dSBenedikt Spranger ip link set dev lan2 master br0 22858dd7a8dSBenedikt Spranger ip link set dev lan3 master br0 22958dd7a8dSBenedikt Spranger ip link set eth0.1 master br0 23058dd7a8dSBenedikt Spranger 23158dd7a8dSBenedikt Spranger # tag traffic on ports 23258dd7a8dSBenedikt Spranger bridge vlan add dev lan1 vid 1 pvid untagged 23358dd7a8dSBenedikt Spranger bridge vlan add dev lan2 vid 1 pvid untagged 23458dd7a8dSBenedikt Spranger bridge vlan add dev lan3 vid 1 pvid untagged 23558dd7a8dSBenedikt Spranger 23658dd7a8dSBenedikt Spranger # configure the bridge 23758dd7a8dSBenedikt Spranger ip addr add 192.0.2.129/25 dev br0 23858dd7a8dSBenedikt Spranger 23958dd7a8dSBenedikt Spranger # bring up the bridge 24058dd7a8dSBenedikt Spranger ip link set dev br0 up 24158dd7a8dSBenedikt Spranger 242*e322bacbSVladimir Oltean*gateway* 24358dd7a8dSBenedikt Spranger .. code-block:: sh 24458dd7a8dSBenedikt Spranger 24558dd7a8dSBenedikt Spranger # tag traffic on CPU port 24658dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.1 type vlan id 1 24758dd7a8dSBenedikt Spranger ip link add link eth0 name eth0.2 type vlan id 2 24858dd7a8dSBenedikt Spranger 24958dd7a8dSBenedikt Spranger # The master interface needs to be brought up before the slave ports. 25058dd7a8dSBenedikt Spranger ip link set eth0 up 25158dd7a8dSBenedikt Spranger ip link set eth0.1 up 25258dd7a8dSBenedikt Spranger ip link set eth0.2 up 25358dd7a8dSBenedikt Spranger 25458dd7a8dSBenedikt Spranger # bring up the slave interfaces 25558dd7a8dSBenedikt Spranger ip link set wan up 25658dd7a8dSBenedikt Spranger ip link set lan1 up 25758dd7a8dSBenedikt Spranger ip link set lan2 up 25858dd7a8dSBenedikt Spranger 25958dd7a8dSBenedikt Spranger # create bridge 26058dd7a8dSBenedikt Spranger ip link add name br0 type bridge 26158dd7a8dSBenedikt Spranger 26258dd7a8dSBenedikt Spranger # activate VLAN filtering 26358dd7a8dSBenedikt Spranger ip link set dev br0 type bridge vlan_filtering 1 26458dd7a8dSBenedikt Spranger 26558dd7a8dSBenedikt Spranger # add ports to bridges 26658dd7a8dSBenedikt Spranger ip link set dev wan master br0 26758dd7a8dSBenedikt Spranger ip link set eth0.1 master br0 26858dd7a8dSBenedikt Spranger ip link set dev lan1 master br0 26958dd7a8dSBenedikt Spranger ip link set dev lan2 master br0 27058dd7a8dSBenedikt Spranger 27158dd7a8dSBenedikt Spranger # tag traffic on ports 27258dd7a8dSBenedikt Spranger bridge vlan add dev lan1 vid 1 pvid untagged 27358dd7a8dSBenedikt Spranger bridge vlan add dev lan2 vid 1 pvid untagged 27458dd7a8dSBenedikt Spranger bridge vlan add dev wan vid 2 pvid untagged 27558dd7a8dSBenedikt Spranger 27658dd7a8dSBenedikt Spranger # configure the VLANs 27758dd7a8dSBenedikt Spranger ip addr add 192.0.2.1/30 dev eth0.2 27858dd7a8dSBenedikt Spranger ip addr add 192.0.2.129/25 dev br0 27958dd7a8dSBenedikt Spranger 28058dd7a8dSBenedikt Spranger # bring up the bridge devices 28158dd7a8dSBenedikt Spranger ip link set br0 up 282