From e533f6cdf1ecb27923f6379166772bd3d0a15d03 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Tue, 19 Jun 2018 21:16:07 +0530 Subject: [PATCH] qcacld-3.0: Return success on same MAC address change Currently if the set mac adderess command comes, driver is returning failure if any of the interface is using the MAC address given in the command. Return success if the same MAC address is passed in the command for the same interface which is using this MAC currently. Change-Id: Iaab6109aa015b6be525eba2bacbe05c3c796e033 CRs-Fixed: 2266755 --- core/hdd/src/wlan_hdd_hostapd.c | 11 +++++++---- core/hdd/src/wlan_hdd_main.c | 10 +++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 33c56fb7e50c..2a301f6fc2b2 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -667,7 +667,7 @@ QDF_STATUS hdd_set_sap_ht2040_mode(struct hdd_adapter *adapter, static int __hdd_hostapd_set_mac_address(struct net_device *dev, void *addr) { struct sockaddr *psta_mac_addr = addr; - struct hdd_adapter *adapter; + struct hdd_adapter *adapter, *adapter_temp; struct hdd_context *hdd_ctx; int ret = 0; struct qdf_mac_addr mac_addr; @@ -681,9 +681,12 @@ static int __hdd_hostapd_set_mac_address(struct net_device *dev, void *addr) return ret; qdf_mem_copy(&mac_addr, psta_mac_addr->sa_data, sizeof(mac_addr)); - - if (hdd_get_adapter_by_macaddr(hdd_ctx, mac_addr.bytes)) { - hdd_err("adapter exist with same mac address " MAC_ADDRESS_STR, + adapter_temp = hdd_get_adapter_by_macaddr(hdd_ctx, mac_addr.bytes); + if (adapter_temp) { + if (!qdf_str_cmp(adapter_temp->dev->name, dev->name)) + return 0; + hdd_err("%s adapter exist with same address " MAC_ADDRESS_STR, + adapter_temp->dev->name, MAC_ADDR_ARRAY(mac_addr.bytes)); return -EINVAL; } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 7ddb2cb4d45c..90b1e41b8659 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -3313,6 +3313,7 @@ static void hdd_close_cesium_nl_sock(void) static int __hdd_set_mac_address(struct net_device *dev, void *addr) { struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev); + struct hdd_adapter *adapter_temp; struct hdd_context *hdd_ctx; struct sockaddr *psta_mac_addr = addr; QDF_STATUS qdf_ret_status = QDF_STATUS_SUCCESS; @@ -3332,9 +3333,12 @@ static int __hdd_set_mac_address(struct net_device *dev, void *addr) return ret; qdf_mem_copy(&mac_addr, psta_mac_addr->sa_data, sizeof(mac_addr)); - - if (hdd_get_adapter_by_macaddr(hdd_ctx, mac_addr.bytes)) { - hdd_err("adapter exist with same mac address " MAC_ADDRESS_STR, + adapter_temp = hdd_get_adapter_by_macaddr(hdd_ctx, mac_addr.bytes); + if (adapter_temp) { + if (!qdf_str_cmp(adapter_temp->dev->name, dev->name)) + return 0; + hdd_err("%s adapter exist with same address " MAC_ADDRESS_STR, + adapter_temp->dev->name, MAC_ADDR_ARRAY(mac_addr.bytes)); return -EINVAL; }