.hostprio = 0,
                .mac_fltres1 = SJA1105_LINKLOCAL_FILTER_A,
                .mac_flt1    = SJA1105_LINKLOCAL_FILTER_A_MASK,
-               .incl_srcpt1 = true,
+               .incl_srcpt1 = false,
                .send_meta1  = false,
                .mac_fltres0 = SJA1105_LINKLOCAL_FILTER_B,
                .mac_flt0    = SJA1105_LINKLOCAL_FILTER_B_MASK,
-               .incl_srcpt0 = true,
+               .incl_srcpt0 = false,
                .send_meta0  = false,
                /* The destination for traffic matching mac_fltres1 and
                 * mac_fltres0 on all ports except host_port. Such traffic
        general_params->tpid = tpid;
        /* EtherType used to identify inner tagged (C-tag) VLAN traffic */
        general_params->tpid2 = tpid2;
+       /* When VLAN filtering is on, we need to at least be able to
+        * decode management traffic through the "backup plan".
+        */
+       general_params->incl_srcpt1 = enabled;
+       general_params->incl_srcpt0 = enabled;
 
        rc = sja1105_static_config_reload(priv);
        if (rc)
 
        int source_port, switch_id;
        struct vlan_ethhdr *hdr;
        u16 tpid, vid, tci;
+       bool is_link_local;
        bool is_tagged;
 
        hdr = vlan_eth_hdr(skb);
        tpid = ntohs(hdr->h_vlan_proto);
        is_tagged = (tpid == ETH_P_SJA1105);
+       is_link_local = sja1105_is_link_local(skb);
 
        skb->offload_fwd_mark = 1;
 
-       if (sja1105_is_link_local(skb)) {
+       if (is_tagged) {
+               /* Normal traffic path. */
+               tci = ntohs(hdr->h_vlan_TCI);
+               vid = tci & VLAN_VID_MASK;
+               source_port = dsa_8021q_rx_source_port(vid);
+               switch_id = dsa_8021q_rx_switch_id(vid);
+               skb->priority = (tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+       } else if (is_link_local) {
                /* Management traffic path. Switch embeds the switch ID and
                 * port ID into bytes of the destination MAC, courtesy of
                 * the incl_srcpt options.
                hdr->h_dest[3] = 0;
                hdr->h_dest[4] = 0;
        } else {
-               /* Normal traffic path. */
-               tci = ntohs(hdr->h_vlan_TCI);
-               vid = tci & VLAN_VID_MASK;
-               source_port = dsa_8021q_rx_source_port(vid);
-               switch_id = dsa_8021q_rx_switch_id(vid);
-               skb->priority = (tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+               return NULL;
        }
 
        skb->dev = dsa_master_find_slave(netdev, switch_id, source_port);