Skip to content

Commit

Permalink
ibmveth: Add function to enable live MAC address changes
Browse files Browse the repository at this point in the history
Add a function that will enable changing the MAC address
of an ibmveth interface while it is still running.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Reviewed-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Thomas Falcon authored and David S. Miller committed Mar 3, 2015
1 parent 71e168b commit c77c761
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion drivers/net/ethernet/ibm/ibmveth.c
Original file line number Diff line number Diff line change
Expand Up @@ -1327,6 +1327,28 @@ static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev)
return ret;
}

static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
{
struct ibmveth_adapter *adapter = netdev_priv(dev);
struct sockaddr *addr = p;
u64 mac_address;
int rc;

if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;

mac_address = ibmveth_encode_mac_addr(addr->sa_data);
rc = h_change_logical_lan_mac(adapter->vdev->unit_address, mac_address);
if (rc) {
netdev_err(adapter->netdev, "h_change_logical_lan_mac failed with rc=%d\n", rc);
return rc;
}

ether_addr_copy(dev->dev_addr, addr->sa_data);

return 0;
}

static const struct net_device_ops ibmveth_netdev_ops = {
.ndo_open = ibmveth_open,
.ndo_stop = ibmveth_close,
Expand All @@ -1337,7 +1359,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
.ndo_fix_features = ibmveth_fix_features,
.ndo_set_features = ibmveth_set_features,
.ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_mac_addr,
.ndo_set_mac_address = ibmveth_set_mac_addr,
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = ibmveth_poll_controller,
#endif
Expand Down

0 comments on commit c77c761

Please sign in to comment.