Nir says: In Spectrum the firmware provided an abstraction for multicast routing on top of the policy engine. In Spectrum-2 this is no longer the case and the driver must interact directly with the policy engine in order to program multicast routes. Every route is written as an ACL rule, its priority set according to route type (*,G) or (S,G) and its action is an appropriate multicast routing action. Multicast routes are written to a specific ACL group which is bound to the appropriate IP protocol IPv4/IPv6.
Patch #1 adds PEMRBT register needed to declare which ACL group is dedicated for each IP protocol multicast routing function. Patch #2 Changes initialization order and puts ACL before router as multicast router now uses ACL module. Patch #3 adds Spectrum-2 ACL keys needed for multicast route matching. Patch #4 adds another ACL profile - in addition to existing flower profile - which allows the multicast routing module to program rules directly into the ACL block. Patch #5 adds the ability to update ACL rules' action, since multicast routes actions may be updated after being configured. Patch #6 separates rule creation operation and rule action creation operation as in multicast router the action is created before the route is inserted. Patch #7 sharpens priority handling in Spectrum-2, to ensure incorrect values are not set to rule's priority. Patch #8 adds the implementation of multicast routing for IPv4 and IPv6 over existing ACL rule programming Finally, patch #9 adds a test for IPv4/IPv6 multicast routing. Nir Dotan (9): mlxsw: reg: Add Policy Engine Multicast Router Binding Table Register mlxsw: spectrum: Change stage of ACL initialization mlxsw: spectrum_acl: Add Spectrum-2 keys mlxsw: spectrum_acl: Add multicast router profile operations mlxsw: spectrum_acl: Add replace rule action operation mlxsw: spectrum_acl: Support rule creation without action creation mlxsw: spectrum_acl: Limit priority value mlxsw: spectrum_router: Add Multicast routing support for Spectrum-2 selftests: forwarding: Add multicast routing test .../mellanox/mlxsw/core_acl_flex_keys.h | 4 + drivers/net/ethernet/mellanox/mlxsw/reg.h | 38 +++ .../net/ethernet/mellanox/mlxsw/spectrum.c | 18 +- .../net/ethernet/mellanox/mlxsw/spectrum.h | 13 +- .../mellanox/mlxsw/spectrum1_acl_tcam.c | 12 +- .../mellanox/mlxsw/spectrum2_acl_tcam.c | 18 + .../mellanox/mlxsw/spectrum2_mr_tcam.c | 281 +++++++++++++++- .../ethernet/mellanox/mlxsw/spectrum_acl.c | 31 +- .../mellanox/mlxsw/spectrum_acl_atcam.c | 61 ++++ .../mellanox/mlxsw/spectrum_acl_ctcam.c | 33 ++ .../mellanox/mlxsw/spectrum_acl_flex_keys.c | 6 + .../mellanox/mlxsw/spectrum_acl_tcam.c | 171 +++++++++- .../mellanox/mlxsw/spectrum_acl_tcam.h | 13 + .../ethernet/mellanox/mlxsw/spectrum_flower.c | 2 +- tools/testing/selftests/net/forwarding/lib.sh | 2 + .../net/forwarding/router_multicast.sh | 311 ++++++++++++++++++ 16 files changed, 996 insertions(+), 18 deletions(-) create mode 100755 tools/testing/selftests/net/forwarding/router_multicast.sh -- 2.19.1