Re: [PATCH] ibmveth: Add function to enable live MAC address changes
From: Thomas Falcon tlfal...@linux.vnet.ibm.com Date: Wed, 25 Feb 2015 18:34:24 -0600 Add a function that will enable changing the MAC address of an ibmveth interface while it is still running. Signed-off-by: Thomas Falcon tlfal...@linux.vnet.ibm.com --- drivers/net/ethernet/ibm/ibmveth.c | 20 +++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 21978cc..6e44357 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -1327,6 +1327,24 @@ 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; + + ether_addr_copy(dev-dev_addr, addr-sa_data); + + mac_address = ibmveth_encode_mac_addr(dev-dev_addr); + rc = h_change_logical_lan_mac(adapter-vdev-unit_address, mac_address); As others have said, if this hypervisor call fails you must not change dev-dev_addr. It must always be in sync with the hardware. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] ibmveth: Add function to enable live MAC address changes
On 02/25/2015 06:34 PM, Thomas Falcon wrote: @@ -1327,6 +1327,24 @@ 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; + + ether_addr_copy(dev-dev_addr, addr-sa_data); + + mac_address = ibmveth_encode_mac_addr(dev-dev_addr); + rc = h_change_logical_lan_mac(adapter-vdev-unit_address, mac_address); + + return rc; Do you still want to be changing dev-dev_addr if h_change_logical_lan_mac returns a failure? -Brian -- Brian King Power Linux I/O IBM Linux Technology Center ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] ibmveth: Add function to enable live MAC address changes
Thu, Feb 26, 2015 at 02:08:06PM CET, brk...@linux.vnet.ibm.com wrote: On 02/25/2015 06:34 PM, Thomas Falcon wrote: @@ -1327,6 +1327,24 @@ 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; + +ether_addr_copy(dev-dev_addr, addr-sa_data); + +mac_address = ibmveth_encode_mac_addr(dev-dev_addr); +rc = h_change_logical_lan_mac(adapter-vdev-unit_address, mac_address); + +return rc; Do you still want to be changing dev-dev_addr if h_change_logical_lan_mac returns a failure? That should not be done. dev_addr should be in sync with real hw addr. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[PATCH] ibmveth: Add function to enable live MAC address changes
Add a function that will enable changing the MAC address of an ibmveth interface while it is still running. Signed-off-by: Thomas Falcon tlfal...@linux.vnet.ibm.com --- drivers/net/ethernet/ibm/ibmveth.c | 20 +++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 21978cc..6e44357 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -1327,6 +1327,24 @@ 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; + + ether_addr_copy(dev-dev_addr, addr-sa_data); + + mac_address = ibmveth_encode_mac_addr(dev-dev_addr); + rc = h_change_logical_lan_mac(adapter-vdev-unit_address, mac_address); + + return rc; +} + static const struct net_device_ops ibmveth_netdev_ops = { .ndo_open = ibmveth_open, .ndo_stop = ibmveth_close, @@ -1337,7 +1355,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 -- 1.9.3 ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev