Re: [PATCH net 1/2] net: dsa: let drivers offload 8021q uppers on standalone ports

Jonas Gorski <[email protected]>
Newsgroups org.kernel.vger.netdev,org.kernel.vger.linux-kernel
Message-ID <CAOiHx=n43MPXKxA7oxBjGh15pa4Uh5etxkPdrV+0GxACEnrRJA@mail.gmail.com>
On Tue, Aug 11, 2026 at 8:25 AM Semih Baskan <[email protected]> wrote:
>
> Hi Vladimir,
>
> > What about VLAN-unaware bridging? Can packets with VID=100 be forwarded
> > autonomously between two ports of a vlan_filtering=0 bridge if that VLAN
> > is not programmed to hardware?
>
> No. On every b53 switch measured so far it cannot, and it fails in the
> same place on all of them. The frame passes ingress admission (with
> filtering off the driver programs VC4_NO_ING_VID_CHK and clears
> VC5_DROP_VTABLE_MISS, one shared code path for every chip), then the
> forwarding stage resolves the egress set from the VLAN table entry for
> that VID. A VID that is not programmed resolves to an empty member set,
> so there is nothing to forward to on any port.
>
> > Does the behaviour depend on silicon capabilities, or is it the same for
> > all switches handled by the b53 driver?

VLAN-unaware bridging does work on BCM5325 and BCM5365. The driver was
originally written for this family (before upstream submission).

There is a register bit that controls what happens when a VLAN-tagged
frame is received for which no (valid) VLAN table entry exists.
Default is drop.

On BCM5325/5365, setting this bit makes the switch *forward* the frame
regardless. This is why it works on those switches even with
VLAN-aware mode enabled in hardware.

On later generations, the bit's function changed to "redirect to CPU".
Stand-alone ports still work there, but VLAN-unaware bridging does
not. Everything goes to CPU, and the tag driver marks it erroneously
as offloaded.

But I didn't notice this until recently. Partially also because there
is no kernel test for VLAN tagged forwarding on a vlan-unaware bridge,
only for standalone ports. Everything saying OK with a vlan-unaware
bridge made me think everything works as expected.

> The port-to-port part has been the same on everything measured. What
> depends on the silicon is only whether the CPU gets a copy of the miss
> frame. Three chips have data across these two threads:
>
>   - BCM53011 (bcm5301x, my RT-N18U): measured for the CPU direction.
>     Every ingress-check setting (NO_ING_VID_CHK, VIO_FWD, VIO_TO_IMP,
>     plus clearing the VC0 miss-drop bit) delivers 0 of 7; the frame dies
>     at member-set resolution, not at admission. Whether a miss frame
>     reaches the CPU at all depends on the IMP routing from the other
>     subthread: with port 8 as IMP it does (indiscriminately), with the
>     in-tree port 5 topology it never does for LAN-class ports.

Only port 5 is an invalid configuration, so no wonder it breaks. The
only valid configurations are port 8 or port 8 + 5, but not port 5
only.

>   - BCM63268 and BCM53115: Jonas measured exactly this case there.
>     Standalone RX works even on a table miss, so the CPU copy exists,
>     but forwarding between ports does not. That is the case you are
>     asking about, on two other generations of this silicon.

Note that BCM53115 also supports a dual IMP / CPU setup, and has the
same limitations, so this isn't something new to BCM5301x. The only
difference is that on BCM5301x the switch is embedded and has ports 5
and 8 (and 7) hardwired to internal MACs, which led to the incorrect
usage of (only) port 5 as CPU.

Best Regards,
Jonas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.