dev->ops = ops;
ds->ops = &b53_switch_ops;
ds->configure_vlan_while_not_filtering = true;
+ ds->untag_bridge_pvid = true;
dev->vlan_enabled = ds->configure_vlan_while_not_filtering;
mutex_init(&dev->reg_mutex);
mutex_init(&dev->stats_mutex);
/* Remove Broadcom tag and update checksum */
skb_pull_rcsum(skb, BRCM_TAG_LEN);
- /* Set the MAC header to where it should point for
- * dsa_untag_bridge_pvid() to parse the correct VLAN header.
- */
- skb_set_mac_header(skb, -ETH_HLEN);
-
skb->offload_fwd_mark = 1;
return skb;
nskb->data - ETH_HLEN - BRCM_TAG_LEN,
2 * ETH_ALEN);
- return dsa_untag_bridge_pvid(nskb);
+ return nskb;
}
static const struct dsa_device_ops brcm_netdev_ops = {
struct net_device *dev,
struct packet_type *pt)
{
- struct sk_buff *nskb;
-
/* tag is prepended to the packet */
- nskb = brcm_tag_rcv_ll(skb, dev, pt, ETH_HLEN);
- if (!nskb)
- return nskb;
-
- return dsa_untag_bridge_pvid(nskb);
+ return brcm_tag_rcv_ll(skb, dev, pt, ETH_HLEN);
}
static const struct dsa_device_ops brcm_prepend_netdev_ops = {