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==tV_3qJppUJWoFtj6CNzUt=S4kAmGt_SsarsRruOEw7Q@mail.gmail.com>
On Tue, Aug 11, 2026 at 11:58 AM Vladimir Oltean <[email protected]> wrote:
>
> On Tue, Aug 11, 2026 at 09:44:37AM +0200, Jonas Gorski wrote:
> > 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.
>
> You need to be more specific, because I don't have a good grasp of the
> various vc0/vc1/vc4/vc5 bits and specifically how they interact.

I don't know that in detail either, and have to find some of this out
by experimenting.

>
> I *think* you are talking about bit VC5_DROP_VTABLE_MISS having
> different behaviours when clear, because that's the only reasonable
> interpretation of the code consistent with your explanation. Are we sure
> there is no other bit which influences "if we don't drop VTABLE misses,
> then what?"?

If there is, I haven't found it. The register description sounds like
there isn't:

On BCM5325/65, this bit is described as

"This bit applies to ingress frames tagged with a VID not
found in the VLAN table. If the DA is not found in the ARL
table, this bit controls the what happens to the frame.
0 = Ingress frame with VLAN table miss is flooded to all
ports.
1 = Ingress frame with VLAN table miss is dropped."

On newer chips, this bit is described as

"Frames with an invalid VID do not have a
corresponding entry in the VLAN table.
1 = Ingress frames with invalid VID are dropped.
0 = Ingress frames with invalid VID are forwarded to
the IMP port."

> Then I suppose the VC4_ING_VID_CHECK_MASK affects only what happens with
> VLAN membership violations (i.e. VTABLE hit, but port not in VLAN). Thus
> it does not influence the VC5_DROP_VTABLE_MISS=false case, correct?

Right. that's correct.

>
> If customizing/unifying the behaviour on VTABLE misses is a dead end,
> could we consider an alternative? Some switches support having the
> VTABLE enabled, but ignore the 802.1Q header from incoming packets
> (thus, all packets get classified to the port PVID). Is there any bit
> which achieves this in b53? What do VC0_VID_CHK_EN and VC0_VLAN_EN do
> exactly? Does B53_VLAN_CTRL2 maybe have some useful hidden bits?

Not to my knowledge. There is a bit to enable replacing the VID in
VLAN tagged packets with the PVID (in VLAN Control 0), but presumably
this would also rewrite the header.

>
> > 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.
>
> Good point. tools/testing/selftests/net/forwarding/bridge_vlan_unaware.sh
> should definitely have a test for this condition.
>
> > > 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.
>
> How badly broken are the configurations with only port 5 as CPU port?
> Is other management traffic like STP also not delivered correctly?

Yes. Anything that is supposed to be forwarded to IMP only is sent out
via the main IMP / port 8, and since port 8 is disabled, it is just
dropped. This presumably applies to all local multicast traffic.

Anything that is flooded is fine, since the floodmasks have port 5 set.

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.