i40e: allow zero MAC address for VFs
authorMitch Williams <mitch.a.williams@intel.com>
Tue, 22 Dec 2015 23:34:43 +0000 (15:34 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 8 Jan 2016 08:59:26 +0000 (00:59 -0800)
Allow the user to specify a zero MAC address for VFs. This removes the
existing MAC address and allows the VF to use a random address. Libvirt
does this normally when removing a VF from a VM.

Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c

index b8deb50bb9f49e4b51a3fd5b6fd564dca01c1846..63e62f9aec6ef45e73e08970d5fca6152ac102c3 100644 (file)
@@ -2084,9 +2084,9 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
                goto error_param;
        }
 
-       if (!is_valid_ether_addr(mac)) {
+       if (is_multicast_ether_addr(mac)) {
                dev_err(&pf->pdev->dev,
-                       "Invalid VF ethernet address\n");
+                       "Invalid Ethernet address %pM for VF %d\n", mac, vf_id);
                ret = -EINVAL;
                goto error_param;
        }
@@ -2097,9 +2097,10 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
        spin_lock_bh(&vsi->mac_filter_list_lock);
 
        /* delete the temporary mac address */
-       i40e_del_filter(vsi, vf->default_lan_addr.addr,
-                       vf->port_vlan_id ? vf->port_vlan_id : -1,
-                       true, false);
+       if (!is_zero_ether_addr(vf->default_lan_addr.addr))
+               i40e_del_filter(vsi, vf->default_lan_addr.addr,
+                               vf->port_vlan_id ? vf->port_vlan_id : -1,
+                               true, false);
 
        /* Delete all the filters for this VSI - we're going to kill it
         * anyway.