RE: [PATCH net v3] net: usb: lan78xx: disable VLAN filter in promiscuous mode

From: Thangaraj.S

Date: Wed Jul 22 2026 - 23:59:25 EST



Hi,

> -----Original Message-----
> From: Nicolai Buchwitz <nb@xxxxxxxxxxx>
> Sent: Monday, July 6, 2026 1:08 PM
> To: enrico.pozzobon@xxxxxxxxxxxx
> Cc: Thangaraj Samynathan - I53494 <Thangaraj.S@xxxxxxxxxxxxx>;
> Rengarajan Sundararajan <Rengarajan.S@xxxxxxxxxxxxx>; UNGLinuxDriver
> <UNGLinuxDriver@xxxxxxxxxxxxx>; Andrew Lunn
> <andrew+netdev@xxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Eric
> Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo
> Abeni <pabeni@xxxxxxxxxx>; Woojung Huh - C21699
> <Woojung.Huh@xxxxxxxxxxxxx>; netdev@xxxxxxxxxxxxxxx; linux-
> usb@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH net v3] net: usb: lan78xx: disable VLAN filter in
> promiscuous mode
>
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
>
> On 1.7.2026 16:47, Enrico Pozzobon via B4 Relay wrote:
> > From: Enrico Pozzobon <enrico.pozzobon@xxxxxxxxxxxx>
> >
> > The hardware VLAN filter (RFE_CTL_VLAN_FILTER_) drops VLAN-tagged
> > frames whose VID has not been registered via
> > lan78xx_vlan_rx_add_vid(). It is left enabled in promiscuous mode, so
> > packet capture (e.g. tcpdump or
> > Wireshark) does not see tagged frames for unregistered VIDs.
> >
> > Clear the filter while the interface is promiscuous and restore it
> > from NETIF_F_HW_VLAN_CTAG_FILTER otherwise. Enforce the same
> condition
> > in
> > lan78xx_set_features() so netdev_update_features() cannot re-enable
> > the filter while promiscuous.
> >
> > Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to
> > 10/100/1000 Ethernet device driver")
> > Signed-off-by: Enrico Pozzobon <enrico.pozzobon@xxxxxxxxxxxx>
> > ---
> > Currently, on microchip lan7801, enabling promiscuous mode does not
> > result in VLAN tagged packets being captured. This patch fixes this,
> > forcing the RFE_CTL_VLAN_FILTER_ flag to be off when promiscuous mode
> > is enabled.
> > ---
> > Changes in v3:
> > - EDITME: describe what is new in this series revision.
> > - EDITME: use bulletpoints and terse descriptions.
> > - Link to v2:
> > https://patch.msgid.link/20260701-lan78xx-vlan-promisc-v2-1-fe3b180667
> > 28@xxxxxxxxxxxx
> >
> > Changes in v2:
> > - moved VLAN filter logic into lan78xx_update_vlan_filter()
> > - Link to v1:
> > https://patch.msgid.link/20260630-lan78xx-vlan-promisc-v1-1-fbf0f903bd
> > 8f@xxxxxxxxxxxx
> >
> > To: Thangaraj Samynathan <Thangaraj.S@xxxxxxxxxxxxx>
> > To: Rengarajan Sundararajan <Rengarajan.S@xxxxxxxxxxxxx>
> > To: UNGLinuxDriver@xxxxxxxxxxxxx
> > To: Andrew Lunn <andrew+netdev@xxxxxxx>
> > To: "David S. Miller" <davem@xxxxxxxxxxxxx>
> > To: Eric Dumazet <edumazet@xxxxxxxxxx>
> > To: Jakub Kicinski <kuba@xxxxxxxxxx>
> > To: Paolo Abeni <pabeni@xxxxxxxxxx>
> > To: Woojung.Huh@xxxxxxxxxxxxx
> > Cc: netdev@xxxxxxxxxxxxxxx
> > Cc: linux-usb@xxxxxxxxxxxxxxx
> > Cc: linux-kernel@xxxxxxxxxxxxxxx
> > ---
> > drivers/net/usb/lan78xx.c | 18 ++++++++++++++----
> > 1 file changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> > index c4cebacabcb5..cb782d81d84f 100644
> > --- a/drivers/net/usb/lan78xx.c
> > +++ b/drivers/net/usb/lan78xx.c
> > @@ -1499,6 +1499,17 @@ static void
> > lan78xx_deferred_multicast_write(struct work_struct *param)
> > return;
> > }
> >
> > +static void lan78xx_update_vlan_filter(struct lan78xx_priv *pdata,
> > + struct net_device *netdev,
> > + netdev_features_t features) {
> > + if ((features & NETIF_F_HW_VLAN_CTAG_FILTER) &&
> > + !(netdev->flags & IFF_PROMISC))
> > + pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
> > + else
> > + pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; }
> > +
> > static void lan78xx_set_multicast(struct net_device *netdev) {
> > struct lan78xx_net *dev = netdev_priv(netdev); @@ -1533,6
> > +1544,8 @@ static void lan78xx_set_multicast(struct net_device
> > *netdev)
> > }
> > }
> >
> > + lan78xx_update_vlan_filter(pdata, dev->net, dev->net->features);
> > +
> > if (netdev_mc_count(dev->net)) {
> > struct netdev_hw_addr *ha;
> > int i;
> > @@ -3074,10 +3087,7 @@ static int lan78xx_set_features(struct
> > net_device *netdev,
> > else
> > pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_;
> >
> > - if (features & NETIF_F_HW_VLAN_CTAG_FILTER)
> > - pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
> > - else
> > - pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
> > + lan78xx_update_vlan_filter(pdata, netdev, features);
> >
> > spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
> >
> >
> > ---
> > base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482
> > change-id: 20260623-lan78xx-vlan-promisc-83af8a48a7ec
> >
> > Best regards,
> > --
> > Enrico Pozzobon <enrico.pozzobon@xxxxxxxxxxxx>
>
> v2 is marked superseded in patchwork, so FWIW
>
> Reviewed-by: Nicolai Buchwitz <nb@xxxxxxxxxxx>
>
> Thanks
> Nicolai
Reviewed-by: Thangaraj Samynathan<Thangaraj.s@xxxxxxxxxxxxx>