Message ID | 20210221213355.1241450-9-olteanv@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | Documentation updates for switchdev and DSA | expand |
On Sun, Feb 21, 2021 at 11:33:51PM +0200, Vladimir Oltean wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > Add a short summary of the methods that a driver writer must implement > for offloading a link aggregation group, and what is still missing. > > Cc: Tobias Waldekranz <tobias@waldekranz.com> > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > --- > Documentation/networking/dsa/dsa.rst | 32 ++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/Documentation/networking/dsa/dsa.rst b/Documentation/networking/dsa/dsa.rst > index 463b48714fe9..0a5b06cf4d45 100644 > --- a/Documentation/networking/dsa/dsa.rst > +++ b/Documentation/networking/dsa/dsa.rst > @@ -698,6 +698,38 @@ Bridge VLAN filtering > function that the driver has to call for each MAC address known to be behind > the given port. A switchdev object is used to carry the VID and MDB info. > > +Link aggregation > +---------------- > + > +Link aggregation is implemented in the Linux networking stack by the bonding > +and team drivers, which are modeled as virtual, stackable network interfaces. > +DSA is capable of offloading a link aggregation group (LAG) to hardware that > +supports the feature, and supports bridging between physical ports and LAGs, > +as well as between LAGs. A bonding/team interface which holds multiple physical > +ports constitutes a logical port, although DSA has no explicit concept of a > +physical port at the moment. Hi Vladimir I don't understand what you mean by a physical port in this context. Due to this, events where a LAG joins/leaves a > +bridge are treated as if all individual physical ports that are members of that > +LAG join/leave the bridge. Switchdev port attributes (VLAN filtering, STP > +state, etc) on a LAG are treated similarly: DSA offloads the same switchdev > +port attribute on all members of the LAG. Switchdev objects on a LAG (FDB, MDB) > +are not yet supported, since the DSA driver API does not have the concept of a > +logical port ID. > + > +- ``port_lag_join``: function invoked when a given switch port is added to a > + LAG. The driver may return ``-EOPNOTSUPP``, and in this case, DSA will fall > + back to a software implementation where all traffic from this port is sent to > + the CPU. > +- ``port_lag_leave``: function invoked when a given switch port leaves a LAG > + and returns to operation as a standalone port. > +- ``port_lag_change``: function invoked when the link state of any member of > + the LAG changes, and the hashing function needs rebalancing only towards the > + subset of physical LAG member ports that are up. "and the hashing function needs rebalancing to only make use of the subset of physical LAG member ports that are up." Andrew
On Sun, Feb 21, 2021 at 23:33, Vladimir Oltean <olteanv@gmail.com> wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > Add a short summary of the methods that a driver writer must implement > for offloading a link aggregation group, and what is still missing. > > Cc: Tobias Waldekranz <tobias@waldekranz.com> > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > --- > Documentation/networking/dsa/dsa.rst | 32 ++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/Documentation/networking/dsa/dsa.rst b/Documentation/networking/dsa/dsa.rst > index 463b48714fe9..0a5b06cf4d45 100644 > --- a/Documentation/networking/dsa/dsa.rst > +++ b/Documentation/networking/dsa/dsa.rst > @@ -698,6 +698,38 @@ Bridge VLAN filtering > function that the driver has to call for each MAC address known to be behind > the given port. A switchdev object is used to carry the VID and MDB info. > > +Link aggregation > +---------------- > + > +Link aggregation is implemented in the Linux networking stack by the bonding > +and team drivers, which are modeled as virtual, stackable network interfaces. > +DSA is capable of offloading a link aggregation group (LAG) to hardware that > +supports the feature, and supports bridging between physical ports and LAGs, > +as well as between LAGs. A bonding/team interface which holds multiple physical > +ports constitutes a logical port, although DSA has no explicit concept of a > +physical port at the moment. Due to this, events where a LAG joins/leaves a s/physical/logical/ right? > +bridge are treated as if all individual physical ports that are members of that > +LAG join/leave the bridge. Switchdev port attributes (VLAN filtering, STP > +state, etc) on a LAG are treated similarly: DSA offloads the same switchdev > +port attribute on all members of the LAG. Switchdev objects on a LAG (FDB, MDB) > +are not yet supported, since the DSA driver API does not have the concept of a > +logical port ID. Switchdev objects (MDB entries and VLANs) are supported, and will be added to all members of the LAG just like attributes. Static FDB entries are not switchdev objects though, and are therefore not supported. > + > +- ``port_lag_join``: function invoked when a given switch port is added to a > + LAG. The driver may return ``-EOPNOTSUPP``, and in this case, DSA will fall > + back to a software implementation where all traffic from this port is sent to > + the CPU. > +- ``port_lag_leave``: function invoked when a given switch port leaves a LAG > + and returns to operation as a standalone port. > +- ``port_lag_change``: function invoked when the link state of any member of > + the LAG changes, and the hashing function needs rebalancing only towards the > + subset of physical LAG member ports that are up. > + > +Drivers that benefit from having an ID associated with each offloaded LAG > +can optionally populate ``ds->num_lag_ids`` from the ``dsa_switch_ops::setup`` > +method. The LAG ID associated with a bonding/team interface can then be > +retrieved by a DSA switch driver using the ``dsa_lag_id`` function. > + > TODO > ==== > > -- > 2.25.1
On Thu, Feb 25, 2021 at 09:42:28PM +0100, Tobias Waldekranz wrote: > On Sun, Feb 21, 2021 at 23:33, Vladimir Oltean <olteanv@gmail.com> wrote: > > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > > > Add a short summary of the methods that a driver writer must implement > > for offloading a link aggregation group, and what is still missing. > > > > Cc: Tobias Waldekranz <tobias@waldekranz.com> > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > > --- > > Documentation/networking/dsa/dsa.rst | 32 ++++++++++++++++++++++++++++ > > 1 file changed, 32 insertions(+) > > > > diff --git a/Documentation/networking/dsa/dsa.rst b/Documentation/networking/dsa/dsa.rst > > index 463b48714fe9..0a5b06cf4d45 100644 > > --- a/Documentation/networking/dsa/dsa.rst > > +++ b/Documentation/networking/dsa/dsa.rst > > @@ -698,6 +698,38 @@ Bridge VLAN filtering > > function that the driver has to call for each MAC address known to be behind > > the given port. A switchdev object is used to carry the VID and MDB info. > > > > +Link aggregation > > +---------------- > > + > > +Link aggregation is implemented in the Linux networking stack by the bonding > > +and team drivers, which are modeled as virtual, stackable network interfaces. > > +DSA is capable of offloading a link aggregation group (LAG) to hardware that > > +supports the feature, and supports bridging between physical ports and LAGs, > > +as well as between LAGs. A bonding/team interface which holds multiple physical > > +ports constitutes a logical port, although DSA has no explicit concept of a > > +physical port at the moment. Due to this, events where a LAG joins/leaves a > > s/physical/logical/ right? Yes, brain fart #1. > > +bridge are treated as if all individual physical ports that are members of that > > +LAG join/leave the bridge. Switchdev port attributes (VLAN filtering, STP > > +state, etc) on a LAG are treated similarly: DSA offloads the same switchdev > > +port attribute on all members of the LAG. Switchdev objects on a LAG (FDB, MDB) > > +are not yet supported, since the DSA driver API does not have the concept of a > > +logical port ID. > > Switchdev objects (MDB entries and VLANs) are supported, and will be > added to all members of the LAG just like attributes. Static FDB entries > are not switchdev objects though, and are therefore not supported. And brain fart #2.
diff --git a/Documentation/networking/dsa/dsa.rst b/Documentation/networking/dsa/dsa.rst index 463b48714fe9..0a5b06cf4d45 100644 --- a/Documentation/networking/dsa/dsa.rst +++ b/Documentation/networking/dsa/dsa.rst @@ -698,6 +698,38 @@ Bridge VLAN filtering function that the driver has to call for each MAC address known to be behind the given port. A switchdev object is used to carry the VID and MDB info. +Link aggregation +---------------- + +Link aggregation is implemented in the Linux networking stack by the bonding +and team drivers, which are modeled as virtual, stackable network interfaces. +DSA is capable of offloading a link aggregation group (LAG) to hardware that +supports the feature, and supports bridging between physical ports and LAGs, +as well as between LAGs. A bonding/team interface which holds multiple physical +ports constitutes a logical port, although DSA has no explicit concept of a +physical port at the moment. Due to this, events where a LAG joins/leaves a +bridge are treated as if all individual physical ports that are members of that +LAG join/leave the bridge. Switchdev port attributes (VLAN filtering, STP +state, etc) on a LAG are treated similarly: DSA offloads the same switchdev +port attribute on all members of the LAG. Switchdev objects on a LAG (FDB, MDB) +are not yet supported, since the DSA driver API does not have the concept of a +logical port ID. + +- ``port_lag_join``: function invoked when a given switch port is added to a + LAG. The driver may return ``-EOPNOTSUPP``, and in this case, DSA will fall + back to a software implementation where all traffic from this port is sent to + the CPU. +- ``port_lag_leave``: function invoked when a given switch port leaves a LAG + and returns to operation as a standalone port. +- ``port_lag_change``: function invoked when the link state of any member of + the LAG changes, and the hashing function needs rebalancing only towards the + subset of physical LAG member ports that are up. + +Drivers that benefit from having an ID associated with each offloaded LAG +can optionally populate ``ds->num_lag_ids`` from the ``dsa_switch_ops::setup`` +method. The LAG ID associated with a bonding/team interface can then be +retrieved by a DSA switch driver using the ``dsa_lag_id`` function. + TODO ====