Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b1c00fc authored by Roopa Prabhu's avatar Roopa Prabhu Committed by David S. Miller
Browse files

enic: Add ndo_set_vf_mac support for enic dynamic devices



This patch implements the ndo_set_vf_mac netdev operation for enic
dynamic devices. It treats the mac address set by IFLA_VF_MAC as a
special case to use it in the port profile provisioning data.

Signed-off-by: default avatarRoopa Prabhu <roprabhu@cisco.com>
Signed-off-by: default avatarDavid Wang <dwang2@cisco.com>
Signed-off-by: default avatarChristian Benvenuti <benve@cisco.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 319d7e84
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@

#define DRV_NAME		"enic"
#define DRV_DESCRIPTION		"Cisco VIC Ethernet NIC Driver"
#define DRV_VERSION		"1.4.1.8"
#define DRV_VERSION		"1.4.1.9"
#define DRV_COPYRIGHT		"Copyright 2008-2010 Cisco Systems, Inc"

#define ENIC_BARS_MAX		6
@@ -61,6 +61,7 @@ struct enic_port_profile {
	char name[PORT_PROFILE_MAX];
	u8 instance_uuid[PORT_UUID_MAX];
	u8 host_uuid[PORT_UUID_MAX];
	u8 vf_mac[ETH_ALEN];
};

/* Per-instance private data structure */
+20 −0
Original line number Diff line number Diff line
@@ -1231,6 +1231,23 @@ static int enic_dev_init_done(struct enic *enic, int *done, int *error)
	return err;
}

static int enic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
{
	struct enic *enic = netdev_priv(netdev);

	if (vf != PORT_SELF_VF)
		return -EOPNOTSUPP;

	/* Ignore the vf argument for now. We can assume the request
	 * is coming on a vf.
	 */
	if (is_valid_ether_addr(mac)) {
		memcpy(enic->pp.vf_mac, mac, ETH_ALEN);
		return 0;
	} else
		return -EINVAL;
}

static int enic_set_port_profile(struct enic *enic, u8 *mac)
{
	struct vic_provinfo *vp;
@@ -2411,6 +2428,9 @@ static const struct net_device_ops enic_netdev_dynamic_ops = {
	.ndo_tx_timeout		= enic_tx_timeout,
	.ndo_set_vf_port	= enic_set_vf_port,
	.ndo_get_vf_port	= enic_get_vf_port,
#ifdef IFLA_VF_MAX
	.ndo_set_vf_mac		= enic_set_vf_mac,
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER
	.ndo_poll_controller	= enic_poll_controller,
#endif