[PATCH net v2 4/6] net: stmmac: selftests: Capture all packets for vlan checks
Nicolai Buchwitz
nb at tipi-net.de
Thu Sep 10 11:13:37 PDT 2026
On 10.9.2026 17:14, Maxime Chevallier wrote:
> While we use vlan_vid_add to trigger the tag filtering machinery
> in the driver, there's no netdev associated to the VLAN. This causes
> the
> skb to arrive with empty skb->vlan_tci fields, as the packet is marked
> OTHERHOST in __netif_receive_skb_core(), and we fail our validation.
>
> Let's use the proxy mechanism introduced for DSA, that registers a
> ETH_P_ALL packet handler that runs earlier, before the vlan netdev
> lookup, then filters for the correct ethertype before passing an skb
> clone to our validation function.
>
> Fixes: 091810dbded9 ("net: stmmac: Introduce selftests support")
> Signed-off-by: Maxime Chevallier <maxime.chevallier at bootlin.com>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
> index f3a533bc6bb6..ec56ee0031ab 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
> @@ -241,6 +241,7 @@ struct stmmac_test_priv {
> __be16 packet_type;
> int (*func)(struct sk_buff *skb, struct net_device *ndev,
> struct packet_type *pt, struct net_device *orig_ndev);
> + bool capture_all;
> int double_vlan;
> int vlan_id;
> int ok;
> @@ -343,7 +344,7 @@ static void stmmac_sft_add_pack(struct packet_type
> *pt)
> {
> struct stmmac_test_priv *tpriv = pt->af_packet_priv;
>
> - if (netdev_uses_dsa(tpriv->pt.dev)) {
> + if (netdev_uses_dsa(tpriv->pt.dev) || tpriv->capture_all) {
> tpriv->packet_type = tpriv->pt.type;
> tpriv->func = tpriv->pt.func;
>
> @@ -994,6 +995,7 @@ static int __stmmac_test_vlanfilt(struct
> stmmac_priv *priv)
> tpriv->pt.dev = priv->dev;
> tpriv->pt.af_packet_priv = tpriv;
> tpriv->packet = &attr;
> + tpriv->capture_all = true;
>
> /*
> * As we use HASH filtering, false positives may appear. This is a
> @@ -1088,6 +1090,7 @@ static int __stmmac_test_dvlanfilt(struct
> stmmac_priv *priv)
> tpriv->pt.dev = priv->dev;
> tpriv->pt.af_packet_priv = tpriv;
> tpriv->packet = &attr;
> + tpriv->capture_all = true;
>
> /*
> * As we use HASH filtering, false positives may appear. This is a
> @@ -1366,6 +1369,7 @@ static int stmmac_test_vlanoff_common(struct
> stmmac_priv *priv, bool svlan)
> tpriv->pt.af_packet_priv = tpriv;
> tpriv->packet = &attr;
> tpriv->vlan_id = 0x123;
> + tpriv->capture_all = true;
> stmmac_sft_add_pack(&tpriv->pt);
>
> ret = vlan_vid_add(priv->dev, htons(proto), tpriv->vlan_id);
Reviewed-by: Nicolai Buchwitz <nb at tipi-net.de>
Thanks,
Nicolai
More information about the linux-arm-kernel
mailing list