diff mbox

net/ixgbe: Allow resetting VF admin mac to zero

Message ID 1467364778-27198-1-git-send-email-juerg.haefliger@hpe.com
State Awaiting Upstream, archived
Delegated to: David Miller
Headers show

Commit Message

Juerg Haefliger July 1, 2016, 9:19 a.m. UTC
The VF administrative mac addresses (stored in the PF driver) are
initialized to zero when the PF driver starts up.

These addresses may be modified in the PF driver through ndo calls
initiated by iproute2 or libvirt.

While we allow the PF/host to change the VF admin mac address from zero
to a valid unicast mac, we do not allow restoring the VF admin mac to
zero. We currently only allow changing this mac to a different unicast mac.

This leads to problems when libvirt scripts are used to deal with
VF mac addresses, and libvirt attempts to revoke the mac so this
host will not use it anymore.

Fix this by allowing resetting a VF administrative MAC back to zero.

Implementation and commit message shamelessly stolen from:
commit 6e5224224faa ("net/mlx4_core: Allow resetting VF admin mac to zero")

Signed-off-by: Juerg Haefliger <juerg.haefliger@hpe.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stephen Hemminger July 7, 2016, 3:57 a.m. UTC | #1
On Fri,  1 Jul 2016 11:19:38 +0200
Juerg Haefliger <juerg.haefliger@hpe.com> wrote:

> The VF administrative mac addresses (stored in the PF driver) are
> initialized to zero when the PF driver starts up.
> 
> These addresses may be modified in the PF driver through ndo calls
> initiated by iproute2 or libvirt.
> 
> While we allow the PF/host to change the VF admin mac address from zero
> to a valid unicast mac, we do not allow restoring the VF admin mac to
> zero. We currently only allow changing this mac to a different unicast mac.
> 
> This leads to problems when libvirt scripts are used to deal with
> VF mac addresses, and libvirt attempts to revoke the mac so this
> host will not use it anymore.
> 
> Fix this by allowing resetting a VF administrative MAC back to zero.
> 
> Implementation and commit message shamelessly stolen from:
> commit 6e5224224faa ("net/mlx4_core: Allow resetting VF admin mac to zero")
> 
> Signed-off-by: Juerg Haefliger <juerg.haefliger@hpe.com>

Since set mac is allowed any time even when device is up, you must
prevent a a device that is in UP state from having all zero MAC address.
Alexander H Duyck July 7, 2016, 3:38 p.m. UTC | #2
On Wed, Jul 6, 2016 at 8:57 PM, Stephen Hemminger
<stephen@networkplumber.org> wrote:
> On Fri,  1 Jul 2016 11:19:38 +0200
> Juerg Haefliger <juerg.haefliger@hpe.com> wrote:
>
>> The VF administrative mac addresses (stored in the PF driver) are
>> initialized to zero when the PF driver starts up.
>>
>> These addresses may be modified in the PF driver through ndo calls
>> initiated by iproute2 or libvirt.
>>
>> While we allow the PF/host to change the VF admin mac address from zero
>> to a valid unicast mac, we do not allow restoring the VF admin mac to
>> zero. We currently only allow changing this mac to a different unicast mac.
>>
>> This leads to problems when libvirt scripts are used to deal with
>> VF mac addresses, and libvirt attempts to revoke the mac so this
>> host will not use it anymore.
>>
>> Fix this by allowing resetting a VF administrative MAC back to zero.
>>
>> Implementation and commit message shamelessly stolen from:
>> commit 6e5224224faa ("net/mlx4_core: Allow resetting VF admin mac to zero")
>>
>> Signed-off-by: Juerg Haefliger <juerg.haefliger@hpe.com>
>
> Since set mac is allowed any time even when device is up, you must
> prevent a a device that is in UP state from having all zero MAC address.

I'm pretty sure the actual MAC address of the VF does not change in
such a case, it should retain the last MAC address it was given from
the PF and report link down until a new one is assigned.

- Alex
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index c5caacd..d075387 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -1280,7 +1280,7 @@  void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter)
 int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
 {
 	struct ixgbe_adapter *adapter = netdev_priv(netdev);
-	if (!is_valid_ether_addr(mac) || (vf >= adapter->num_vfs))
+	if (is_multicast_ether_addr(mac) || (vf >= adapter->num_vfs))
 		return -EINVAL;
 	adapter->vfinfo[vf].pf_set_mac = true;
 	dev_info(&adapter->pdev->dev, "setting MAC %pM on VF %d\n", mac, vf);