1132db935SJakub Kicinski.. SPDX-License-Identifier: GPL-2.0 2132db935SJakub Kicinski 3132db935SJakub Kicinski====================================================== 4132db935SJakub KicinskiTexas Instruments CPSW switchdev based ethernet driver 5132db935SJakub Kicinski====================================================== 6132db935SJakub Kicinski 7132db935SJakub Kicinski:Version: 2.0 8132db935SJakub Kicinski 9132db935SJakub KicinskiPort renaming 10132db935SJakub Kicinski============= 11132db935SJakub Kicinski 12132db935SJakub KicinskiOn older udev versions renaming of ethX to swXpY will not be automatically 13132db935SJakub Kicinskisupported 14132db935SJakub Kicinski 15132db935SJakub KicinskiIn order to rename via udev:: 16132db935SJakub Kicinski 17132db935SJakub Kicinski ip -d link show dev sw0p1 | grep switchid 18132db935SJakub Kicinski 19132db935SJakub Kicinski SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}==<switchid>, \ 20132db935SJakub Kicinski ATTR{phys_port_name}!="", NAME="sw0$attr{phys_port_name}" 21132db935SJakub Kicinski 22132db935SJakub Kicinski 23132db935SJakub KicinskiDual mac mode 24132db935SJakub Kicinski============= 25132db935SJakub Kicinski 26132db935SJakub Kicinski- The new (cpsw_new.c) driver is operating in dual-emac mode by default, thus 27132db935SJakub Kicinski working as 2 individual network interfaces. Main differences from legacy CPSW 28132db935SJakub Kicinski driver are: 29132db935SJakub Kicinski 30132db935SJakub Kicinski - optimized promiscuous mode: The P0_UNI_FLOOD (both ports) is enabled in 31132db935SJakub Kicinski addition to ALLMULTI (current port) instead of ALE_BYPASS. 32132db935SJakub Kicinski So, Ports in promiscuous mode will keep possibility of mcast and vlan 33132db935SJakub Kicinski filtering, which is provides significant benefits when ports are joined 34132db935SJakub Kicinski to the same bridge, but without enabling "switch" mode, or to different 35132db935SJakub Kicinski bridges. 36132db935SJakub Kicinski - learning disabled on ports as it make not too much sense for 37132db935SJakub Kicinski segregated ports - no forwarding in HW. 38132db935SJakub Kicinski - enabled basic support for devlink. 39132db935SJakub Kicinski 40132db935SJakub Kicinski :: 41132db935SJakub Kicinski 42132db935SJakub Kicinski devlink dev show 43132db935SJakub Kicinski platform/48484000.switch 44132db935SJakub Kicinski 45132db935SJakub Kicinski devlink dev param show 46132db935SJakub Kicinski platform/48484000.switch: 47132db935SJakub Kicinski name switch_mode type driver-specific 48132db935SJakub Kicinski values: 49132db935SJakub Kicinski cmode runtime value false 50132db935SJakub Kicinski name ale_bypass type driver-specific 51132db935SJakub Kicinski values: 52132db935SJakub Kicinski cmode runtime value false 53132db935SJakub Kicinski 54132db935SJakub KicinskiDevlink configuration parameters 55132db935SJakub Kicinski================================ 56132db935SJakub Kicinski 57132db935SJakub KicinskiSee Documentation/networking/devlink/ti-cpsw-switch.rst 58132db935SJakub Kicinski 59132db935SJakub KicinskiBridging in dual mac mode 60132db935SJakub Kicinski========================= 61132db935SJakub Kicinski 62132db935SJakub KicinskiThe dual_mac mode requires two vids to be reserved for internal purposes, 63132db935SJakub Kicinskiwhich, by default, equal CPSW Port numbers. As result, bridge has to be 64132db935SJakub Kicinskiconfigured in vlan unaware mode or default_pvid has to be adjusted:: 65132db935SJakub Kicinski 66132db935SJakub Kicinski ip link add name br0 type bridge 67132db935SJakub Kicinski ip link set dev br0 type bridge vlan_filtering 0 68132db935SJakub Kicinski echo 0 > /sys/class/net/br0/bridge/default_pvid 69132db935SJakub Kicinski ip link set dev sw0p1 master br0 70132db935SJakub Kicinski ip link set dev sw0p2 master br0 71132db935SJakub Kicinski 72132db935SJakub Kicinskior:: 73132db935SJakub Kicinski 74132db935SJakub Kicinski ip link add name br0 type bridge 75132db935SJakub Kicinski ip link set dev br0 type bridge vlan_filtering 0 76132db935SJakub Kicinski echo 100 > /sys/class/net/br0/bridge/default_pvid 77132db935SJakub Kicinski ip link set dev br0 type bridge vlan_filtering 1 78132db935SJakub Kicinski ip link set dev sw0p1 master br0 79132db935SJakub Kicinski ip link set dev sw0p2 master br0 80132db935SJakub Kicinski 81132db935SJakub KicinskiEnabling "switch" 82132db935SJakub Kicinski================= 83132db935SJakub Kicinski 84132db935SJakub KicinskiThe Switch mode can be enabled by configuring devlink driver parameter 85132db935SJakub Kicinski"switch_mode" to 1/true:: 86132db935SJakub Kicinski 87132db935SJakub Kicinski devlink dev param set platform/48484000.switch \ 88132db935SJakub Kicinski name switch_mode value 1 cmode runtime 89132db935SJakub Kicinski 90132db935SJakub KicinskiThis can be done regardless of the state of Port's netdev devices - UP/DOWN, but 91132db935SJakub KicinskiPort's netdev devices have to be in UP before joining to the bridge to avoid 92132db935SJakub Kicinskioverwriting of bridge configuration as CPSW switch driver copletly reloads its 93132db935SJakub Kicinskiconfiguration when first Port changes its state to UP. 94132db935SJakub Kicinski 95132db935SJakub KicinskiWhen the both interfaces joined the bridge - CPSW switch driver will enable 96132db935SJakub Kicinskimarking packets with offload_fwd_mark flag unless "ale_bypass=0" 97132db935SJakub Kicinski 98132db935SJakub KicinskiAll configuration is implemented via switchdev API. 99132db935SJakub Kicinski 100132db935SJakub KicinskiBridge setup 101132db935SJakub Kicinski============ 102132db935SJakub Kicinski 103132db935SJakub Kicinski:: 104132db935SJakub Kicinski 105132db935SJakub Kicinski devlink dev param set platform/48484000.switch \ 106132db935SJakub Kicinski name switch_mode value 1 cmode runtime 107132db935SJakub Kicinski 108132db935SJakub Kicinski ip link add name br0 type bridge 109132db935SJakub Kicinski ip link set dev br0 type bridge ageing_time 1000 110132db935SJakub Kicinski ip link set dev sw0p1 up 111132db935SJakub Kicinski ip link set dev sw0p2 up 112132db935SJakub Kicinski ip link set dev sw0p1 master br0 113132db935SJakub Kicinski ip link set dev sw0p2 master br0 114132db935SJakub Kicinski 115132db935SJakub Kicinski [*] bridge vlan add dev br0 vid 1 pvid untagged self 116132db935SJakub Kicinski 117132db935SJakub Kicinski [*] if vlan_filtering=1. where default_pvid=1 118132db935SJakub Kicinski 119132db935SJakub Kicinski Note. Steps [*] are mandatory. 120132db935SJakub Kicinski 121132db935SJakub Kicinski 122132db935SJakub KicinskiOn/off STP 123132db935SJakub Kicinski========== 124132db935SJakub Kicinski 125132db935SJakub Kicinski:: 126132db935SJakub Kicinski 127132db935SJakub Kicinski ip link set dev BRDEV type bridge stp_state 1/0 128132db935SJakub Kicinski 129132db935SJakub KicinskiVLAN configuration 130132db935SJakub Kicinski================== 131132db935SJakub Kicinski 132132db935SJakub Kicinski:: 133132db935SJakub Kicinski 134132db935SJakub Kicinski bridge vlan add dev br0 vid 1 pvid untagged self <---- add cpu port to VLAN 1 135132db935SJakub Kicinski 136132db935SJakub KicinskiNote. This step is mandatory for bridge/default_pvid. 137132db935SJakub Kicinski 138132db935SJakub KicinskiAdd extra VLANs 139132db935SJakub Kicinski=============== 140132db935SJakub Kicinski 141132db935SJakub Kicinski 1. untagged:: 142132db935SJakub Kicinski 143132db935SJakub Kicinski bridge vlan add dev sw0p1 vid 100 pvid untagged master 144132db935SJakub Kicinski bridge vlan add dev sw0p2 vid 100 pvid untagged master 145132db935SJakub Kicinski bridge vlan add dev br0 vid 100 pvid untagged self <---- Add cpu port to VLAN100 146132db935SJakub Kicinski 147132db935SJakub Kicinski 2. tagged:: 148132db935SJakub Kicinski 149132db935SJakub Kicinski bridge vlan add dev sw0p1 vid 100 master 150132db935SJakub Kicinski bridge vlan add dev sw0p2 vid 100 master 151132db935SJakub Kicinski bridge vlan add dev br0 vid 100 pvid tagged self <---- Add cpu port to VLAN100 152132db935SJakub Kicinski 153132db935SJakub KicinskiFDBs 154132db935SJakub Kicinski---- 155132db935SJakub Kicinski 156132db935SJakub KicinskiFDBs are automatically added on the appropriate switch port upon detection 157132db935SJakub Kicinski 158132db935SJakub KicinskiManually adding FDBs:: 159132db935SJakub Kicinski 160132db935SJakub Kicinski bridge fdb add aa:bb:cc:dd:ee:ff dev sw0p1 master vlan 100 161132db935SJakub Kicinski bridge fdb add aa:bb:cc:dd:ee:fe dev sw0p2 master <---- Add on all VLANs 162132db935SJakub Kicinski 163132db935SJakub KicinskiMDBs 164132db935SJakub Kicinski---- 165132db935SJakub Kicinski 166132db935SJakub KicinskiMDBs are automatically added on the appropriate switch port upon detection 167132db935SJakub Kicinski 168132db935SJakub KicinskiManually adding MDBs:: 169132db935SJakub Kicinski 170132db935SJakub Kicinski bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent vid 100 171132db935SJakub Kicinski bridge mdb add dev br0 port sw0p1 grp 239.1.1.1 permanent <---- Add on all VLANs 172132db935SJakub Kicinski 173132db935SJakub KicinskiMulticast flooding 174132db935SJakub Kicinski================== 175132db935SJakub KicinskiCPU port mcast_flooding is always on 176132db935SJakub Kicinski 177*a266ef69SRandy DunlapTurning flooding on/off on switch ports: 178132db935SJakub Kicinskibridge link set dev sw0p1 mcast_flood on/off 179132db935SJakub Kicinski 180132db935SJakub KicinskiAccess and Trunk port 181132db935SJakub Kicinski===================== 182132db935SJakub Kicinski 183132db935SJakub Kicinski:: 184132db935SJakub Kicinski 185132db935SJakub Kicinski bridge vlan add dev sw0p1 vid 100 pvid untagged master 186132db935SJakub Kicinski bridge vlan add dev sw0p2 vid 100 master 187132db935SJakub Kicinski 188132db935SJakub Kicinski 189132db935SJakub Kicinski bridge vlan add dev br0 vid 100 self 190132db935SJakub Kicinski ip link add link br0 name br0.100 type vlan id 100 191132db935SJakub Kicinski 192132db935SJakub KicinskiNote. Setting PVID on Bridge device itself working only for 193132db935SJakub Kicinskidefault VLAN (default_pvid). 194132db935SJakub Kicinski 195132db935SJakub KicinskiNFS 196132db935SJakub Kicinski=== 197132db935SJakub Kicinski 198132db935SJakub KicinskiThe only way for NFS to work is by chrooting to a minimal environment when 199132db935SJakub Kicinskiswitch configuration that will affect connectivity is needed. 200132db935SJakub KicinskiAssuming you are booting NFS with eth1 interface(the script is hacky and 201132db935SJakub Kicinskiit's just there to prove NFS is doable). 202132db935SJakub Kicinski 203132db935SJakub Kicinskisetup.sh:: 204132db935SJakub Kicinski 205132db935SJakub Kicinski #!/bin/sh 206132db935SJakub Kicinski mkdir proc 207132db935SJakub Kicinski mount -t proc none /proc 208132db935SJakub Kicinski ifconfig br0 > /dev/null 209132db935SJakub Kicinski if [ $? -ne 0 ]; then 210132db935SJakub Kicinski echo "Setting up bridge" 211132db935SJakub Kicinski ip link add name br0 type bridge 212132db935SJakub Kicinski ip link set dev br0 type bridge ageing_time 1000 213132db935SJakub Kicinski ip link set dev br0 type bridge vlan_filtering 1 214132db935SJakub Kicinski 215132db935SJakub Kicinski ip link set eth1 down 216132db935SJakub Kicinski ip link set eth1 name sw0p1 217132db935SJakub Kicinski ip link set dev sw0p1 up 218132db935SJakub Kicinski ip link set dev sw0p2 up 219132db935SJakub Kicinski ip link set dev sw0p2 master br0 220132db935SJakub Kicinski ip link set dev sw0p1 master br0 221132db935SJakub Kicinski bridge vlan add dev br0 vid 1 pvid untagged self 222132db935SJakub Kicinski ifconfig sw0p1 0.0.0.0 223132db935SJakub Kicinski udhchc -i br0 224132db935SJakub Kicinski fi 225132db935SJakub Kicinski umount /proc 226132db935SJakub Kicinski 227132db935SJakub Kicinskirun_nfs.sh::: 228132db935SJakub Kicinski 229132db935SJakub Kicinski #!/bin/sh 230132db935SJakub Kicinski mkdir /tmp/root/bin -p 231132db935SJakub Kicinski mkdir /tmp/root/lib -p 232132db935SJakub Kicinski 233132db935SJakub Kicinski cp -r /lib/ /tmp/root/ 234132db935SJakub Kicinski cp -r /bin/ /tmp/root/ 235132db935SJakub Kicinski cp /sbin/ip /tmp/root/bin 236132db935SJakub Kicinski cp /sbin/bridge /tmp/root/bin 237132db935SJakub Kicinski cp /sbin/ifconfig /tmp/root/bin 238132db935SJakub Kicinski cp /sbin/udhcpc /tmp/root/bin 239132db935SJakub Kicinski cp /path/to/setup.sh /tmp/root/bin 240132db935SJakub Kicinski chroot /tmp/root/ busybox sh /bin/setup.sh 241132db935SJakub Kicinski 242132db935SJakub Kicinski run ./run_nfs.sh 243