1. Nov 03, 2020
  2. Nov 01, 2020
  3. Oct 31, 2020
    • Jakub Kicinski's avatar
      Merge branch 'l2-multicast-forwarding-for-ocelot-switch' · 68bb4665
      Jakub Kicinski authored
      Vladimir Oltean says:
      
      ====================
      L2 multicast forwarding for Ocelot switch
      
      This series enables the mscc_ocelot switch to forward raw L2 (non-IP)
      mdb entries as configured by the bridge driver after this patch:
      
      https://patchwork.ozlabs.org/project/netdev/patch/20201028233831.610076-1-vladimir.oltean@nxp.com/
      ====================
      
      Link: https://lore.kernel.org/r/20201029022738.722794-1-vladimir.oltean@nxp.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      68bb4665
    • Vladimir Oltean's avatar
      net: mscc: ocelot: support L2 multicast entries · e5d1f896
      Vladimir Oltean authored
      
      
      There is one main difference in mscc_ocelot between IP multicast and L2
      multicast. With IP multicast, destination ports are encoded into the
      upper bytes of the multicast MAC address. Example: to deliver the
      address 01:00:5E:11:22:33 to ports 3, 8, and 9, one would need to
      program the address of 00:03:08:11:22:33 into hardware. Whereas for L2
      multicast, the MAC table entry points to a Port Group ID (PGID), and
      that PGID contains the port mask that the packet will be forwarded to.
      As to why it is this way, no clue. My guess is that not all port
      combinations can be supported simultaneously with the limited number of
      PGIDs, and this was somehow an issue for IP multicast but not for L2
      multicast. Anyway.
      
      Prior to this change, the raw L2 multicast code was bogus, due to the
      fact that there wasn't really any way to test it using the bridge code.
      There were 2 issues:
      - A multicast PGID was allocated for each MDB entry, but it wasn't in
        fact programmed to hardware. It was dummy.
      - In fact we don't want to reserve a multicast PGID for every single MDB
        entry. That would be odd because we can only have ~60 PGIDs, but
        thousands of MDB entries. So instead, we want to reserve a multicast
        PGID for every single port combination for multicast traffic. And
        since we can have 2 (or more) MDB entries delivered to the same port
        group (and therefore PGID), we need to reference-count the PGIDs.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e5d1f896