From 6c1c200387e2cd7808ce674c6bed0aaf000b1c9f Mon Sep 17 00:00:00 2001 From: davidevinavil Date: Sat, 28 Jan 2017 23:50:06 +0100 Subject: z2_plus: Fix mac address * Let's ensure that wlan_mac.bin exists in persist partition and is valid, otherwise WiFi MAC address is randomized on every boot because qca_cld can't properly read it Change-Id: I82d66b84104802eaa1becdc72a1aec5fd185e5fa --- wifi/Android.mk | 11 +++++++++ wifi/zuk_readmac.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 wifi/Android.mk create mode 100644 wifi/zuk_readmac.c (limited to 'wifi') diff --git a/wifi/Android.mk b/wifi/Android.mk new file mode 100644 index 0000000..8876a2b --- /dev/null +++ b/wifi/Android.mk @@ -0,0 +1,11 @@ +LOCAL_PATH:= $(call my-dir) + +ifeq ($(strip $(BOARD_HAS_QCOM_WLAN)),true) +include $(CLEAR_VARS) +LOCAL_MODULE := readmac +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := zuk_readmac.c +LOCAL_CFLAGS += -Wall +LOCAL_SHARED_LIBRARIES := libc libcutils libutils liblog +include $(BUILD_EXECUTABLE) +endif diff --git a/wifi/zuk_readmac.c b/wifi/zuk_readmac.c new file mode 100644 index 0000000..55616d8 --- /dev/null +++ b/wifi/zuk_readmac.c @@ -0,0 +1,72 @@ +#define LOG_TAG "zuk_readmac" +#define LOG_NDEBUG 0 + +#include +#include +#include +#include +#include +#include + +#define MAC_ADDR_SIZE 6 +#define WLAN_MAC_BIN "/persist/wlan_mac.bin" + +static int check_wlan_mac_bin_file() +{ + char content[1024]; + FILE *fp; + + fp = fopen(WLAN_MAC_BIN, "r"); + if (fp != NULL) { + memset(content, 0, sizeof(content)); + fread(content, 1, sizeof(content)-1, fp); + fclose(fp); + + if (strstr(content, "Intf0MacAddress") == NULL) { + ALOGV("%s is missing Intf0MacAddress entry value", WLAN_MAC_BIN); + return 1; + } + + if (strstr(content, "Intf1MacAddress") == NULL) { + ALOGV("%s is missing Intf1MacAddress entry value", WLAN_MAC_BIN); + return 1; + } + + return 0; + } + return 1; +} + +int main() +{ + int i, wlan_addr3, wlan_addr4, wlan_addr5, ret; + + // First 6 hex number are fix + unsigned char wlan_addr[] = { 0xd8, 0x9a, 0x34 }; + + // Last 6 hex number are random + srand(time(NULL) + getpid()); + for (i = 0; i < 3; i++) { + wlan_addr3 = rand() % 256; + wlan_addr4 = rand() % 256; + wlan_addr5 = rand() % 256; + } + + FILE *fp; + + // Store WLAN MAC address in the persist file, if needed + if (check_wlan_mac_bin_file()) { + fp = fopen(WLAN_MAC_BIN, "w"); + fprintf(fp, "Intf0MacAddress=%02X%02X%02X%02X%02X%02X\n", + wlan_addr[0], wlan_addr[1], wlan_addr[2], wlan_addr3, wlan_addr4, wlan_addr5); + fprintf(fp, "Intf1MacAddress=%02X%02X%02X%02X%02X%02X\n", + wlan_addr[0], wlan_addr[1], wlan_addr[2], wlan_addr3, wlan_addr4, (wlan_addr5+1)); + fprintf(fp, "END\n"); + fclose(fp); + ALOGV("%s was successfully generated", WLAN_MAC_BIN); + } else { + ALOGV("%s already exists and is valid", WLAN_MAC_BIN); + } + + return 0; +} -- cgit v1.2.3