Re: [PATCH RFC net-next 0/3] Multi-CPU DSA support
From: Marek Behun <hidden>
Date: 2019-08-24 21:01:26
On Sat, 24 Aug 2019 13:04:04 -0700 Florian Fainelli [off-list ref] wrote:
1) Your approach is kind of interesting here, not sure if it is the best
but it is not outright wrong. In the past, we had been talking about
different approaches, some of which seemed too simplistic or too narrow
on the use case, and some of which that are up in the air and were not
worked on.
- John Crispin submitted a patch series for the MTK switch driver a
while back that was picked up by Frank Wunderlich more recently. This
approach uses a Device Tree based configuration in order to statically
assign ports, or groups of ports to a specific DSA master device. This
is IMHO wrong because a) DT is not to impose a policy but strictly
describe HW, and b) there was no way to change that static assignment at
runtime.
- Based on that patch series, Andrew, Vivien, Frank and myself discussed
two possible options:
- allowing the enslaving of DSA master devices in the bridge, so as to
provide a hint that specific DSA slave network devices should be
"bound"/"linked" to a specific DSA master device. This requires
modifications in the bridge layer to avoid undoing what commit
8db0a2ee2c6302a1dcbcdb93cb731dfc6c0cdb5e ("net: bridge: reject
DSA-enabled master netdevices as bridge members"). This would also
require a bridge to be set-up
- enhancing the iproute2 command and backing kernel code in order to
allow defining that a DSA slave device may be enslaved into a specific
DSA master, similarly to how you currently enslave a device into a
bridge, you could "enslave" a DSA slave to a DSA master with something
that could look like this:
ip link set dev sw0p0 master eth0 # Associate port 0 with eth0
ip link set dev sw0p1 master eth1 # Associate port 1 with eth1
To date, this may be the best way to do what we want here, rather than
use the iflink which is a bit re-purposing something that is not exactly
meant for that.We cannot use "set master" to set CPU port, since that is used for enslaving interfaces to bridges. There are usecases where these would conflict with each other. The semantics would become complicated and the documentation would became weird to users. We are *already* using the iflink property to report which CPU device is used as CPU destination port for a given switch slave interface. So why to use that for changing this, also? If you think that iflink should not be used for this, and other agree, then we should create a new property, something like dsa-upstream, (eg. ip link set dev sw0p0 dsa-upstream eth0). Using the "master" property is not right, IMO. Marek