]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: mv88e6xxx: Improve isolation of standalone ports
authorTobias Waldekranz <tobias@waldekranz.com>
Thu, 3 Feb 2022 10:16:53 +0000 (11:16 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 3 Feb 2022 14:05:56 +0000 (14:05 +0000)
commit8f38a021dd22fbbaec99d1f37aead89d31646313
tree92e8c201f0bb7085acbc4ced81aa91ec1b62a553
parenta7a7b526eeae2fdb130864c446bce5633102c7d4
net: dsa: mv88e6xxx: Improve isolation of standalone ports

Clear MapDA on standalone ports to bypass any ATU lookup that might
point the packet in the wrong direction. This means that all packets
are flooded using the PVT config. So make sure that standalone ports
are only allowed to communicate with the local upstream port.

Here is a scenario in which this is needed:

   CPU
    |     .----.
.---0---. | .--0--.
|  sw0  | | | sw1 |
'-1-2-3-' | '-1-2-'
      '---'

- sw0p1 and sw1p1 are bridged
- sw0p2 and sw1p2 are in standalone mode
- Learning must be enabled on sw0p3 in order for hardware forwarding
  to work properly between bridged ports

1. A packet with SA :aa comes in on sw1p2
   1a. Egresses sw1p0
   1b. Ingresses sw0p3, ATU adds an entry for :aa towards port 3
   1c. Egresses sw0p0

2. A packet with DA :aa comes in on sw0p2
   2a. If an ATU lookup is done at this point, the packet will be
       incorrectly forwarded towards sw0p3. With this change in place,
       the ATU is bypassed and the packet is forwarded in accordance
       with the PVT, which only contains the CPU port.

Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/port.c
drivers/net/dsa/mv88e6xxx/port.h
include/net/dsa.h