struct be_adapter *adapter = netdev_priv(netdev);
        int status = 0;
 
-       if (!be_physfn(adapter)) {
+       if (!lancer_chip(adapter) && !be_physfn(adapter)) {
                status = -EINVAL;
                goto ret;
        }
 
+       /* Packets with VID 0 are always received by Lancer by default */
+       if (lancer_chip(adapter) && vid == 0)
+               goto ret;
+
        adapter->vlan_tag[vid] = 1;
        if (adapter->vlans_added <= (adapter->max_vlans + 1))
                status = be_vid_config(adapter);
        struct be_adapter *adapter = netdev_priv(netdev);
        int status = 0;
 
-       if (!be_physfn(adapter)) {
+       if (!lancer_chip(adapter) && !be_physfn(adapter)) {
                status = -EINVAL;
                goto ret;
        }
 
+       /* Packets with VID 0 are always received by Lancer by default */
+       if (lancer_chip(adapter) && vid == 0)
+               goto ret;
+
        adapter->vlan_tag[vid] = 0;
        if (adapter->vlans_added <= adapter->max_vlans)
                status = be_vid_config(adapter);