206 lines
5.4 KiB
Diff
206 lines
5.4 KiB
Diff
From 6552e769a6f23b867e828ce875932cba5fb66fa6 Mon Sep 17 00:00:00 2001
|
|
From: ldj <ludajunjunjun@126.com>
|
|
Date: Wed, 2 Dec 2015 14:35:30 +0800
|
|
Subject: [PATCH 2/2] support setmacaddr by lcm
|
|
|
|
---
|
|
setmacaddr/Android.mk | 13 +++++
|
|
setmacaddr/setmacaddr.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
tulip-common.mk | 6 +-
|
|
3 files changed, 166 insertions(+), 1 deletion(-)
|
|
create mode 100755 setmacaddr/Android.mk
|
|
create mode 100755 setmacaddr/setmacaddr.c
|
|
|
|
diff --git a/setmacaddr/Android.mk b/setmacaddr/Android.mk
|
|
new file mode 100755
|
|
index 0000000..0d05569
|
|
--- /dev/null
|
|
+++ b/setmacaddr/Android.mk
|
|
@@ -0,0 +1,13 @@
|
|
+LOCAL_PATH:= $(call my-dir)
|
|
+# RTK mac
|
|
+include $(CLEAR_VARS)
|
|
+LOCAL_PRELINK_MODULE := false
|
|
+LOCAL_SHARED_LIBRARIES := libcutils
|
|
+LOCAL_LDLIBS += -Idl
|
|
+
|
|
+LOCAL_SRC_FILES := setmacaddr.c
|
|
+
|
|
+LOCAL_MODULE := setmacaddr
|
|
+
|
|
+LOCAL_MODULE_TAGS := optional
|
|
+include $(BUILD_EXECUTABLE)
|
|
diff --git a/setmacaddr/setmacaddr.c b/setmacaddr/setmacaddr.c
|
|
new file mode 100755
|
|
index 0000000..142ca5a
|
|
--- /dev/null
|
|
+++ b/setmacaddr/setmacaddr.c
|
|
@@ -0,0 +1,148 @@
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <time.h>
|
|
+#include <fcntl.h>
|
|
+
|
|
+#define LOG_TAG "setmacaddr"
|
|
+#include <utils/Log.h>
|
|
+
|
|
+#include <cutils/properties.h>
|
|
+
|
|
+#define PROPERTY_BT_BDADDR_PATH "ro.bt.bdaddr_path"
|
|
+
|
|
+#define MAC_PATH "/data/wifimac.txt"
|
|
+#define BTA_PATH "/data/btaddr.txt"
|
|
+#define STATIC_MAC_PATH "/mnt/private/ULI/factory/mac.txt"
|
|
+#define STATIC_BTA_PATH "/mnt/private/ULI/factory/btaddr.txt"
|
|
+
|
|
+#define MAC_LEN 20
|
|
+
|
|
+static int gen_randseed()
|
|
+{
|
|
+ int fd;
|
|
+ int rc;
|
|
+ unsigned int randseed;
|
|
+ size_t len;
|
|
+ struct timeval tval;
|
|
+
|
|
+ len = sizeof(randseed);
|
|
+ fd = open("/dev/urandom", O_RDONLY);
|
|
+ if (fd < 0)
|
|
+ {
|
|
+ ALOGD("%s: Open /dev/urandom fail\n", __FUNCTION__);
|
|
+ return -1;
|
|
+ }
|
|
+ rc = read(fd, &randseed, len);
|
|
+ close(fd);
|
|
+ if(rc <0)
|
|
+ {
|
|
+ if (gettimeofday(&tval, (struct timezone *)0) > 0)
|
|
+ randseed = (unsigned int) tval.tv_usec;
|
|
+ else
|
|
+ randseed = (unsigned int) time(NULL);
|
|
+
|
|
+ ALOGD("open /dev/urandom fail, using system time for randseed\n");
|
|
+ }
|
|
+ return randseed;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Get a Randon MAC addr, save to macaddr
|
|
+ *
|
|
+ */
|
|
+static int get_randon_mac(char *macaddr)
|
|
+{
|
|
+ int randseed;
|
|
+ int randvar1,randvar2;
|
|
+
|
|
+ randseed = gen_randseed();
|
|
+ if(randseed == -1)
|
|
+ return -1;
|
|
+ srand((unsigned int)randseed);
|
|
+
|
|
+ randvar1 = rand();
|
|
+ randvar2 = rand();
|
|
+ ALOGD("%s: randvar1 =0x%x, randvar2=0x%x",__FUNCTION__, randvar1,randvar2);
|
|
+
|
|
+ //sprintf(macaddr, "00:e0:4c:%02x:%02x:%02x",
|
|
+ //changed by tingle for 6 bytes random
|
|
+ //Byte1,bit0,bit1 can't be 1.
|
|
+ sprintf(macaddr, "%02x:%02x:%02x:%02x:%02x:%02x", \
|
|
+ (unsigned char)((randvar2)&0xFC), \
|
|
+ (unsigned char)((randvar2>>8)&0xFF), \
|
|
+ (unsigned char)((randvar2>>16)&0xFF), \
|
|
+ (unsigned char)((randvar1)&0xFF), \
|
|
+ (unsigned char)((randvar1>>8)&0xFF), \
|
|
+ (unsigned char)((randvar1>>16)&0xFF));
|
|
+
|
|
+ ALOGD("generate a new MAC address: %s", macaddr);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Generate randon MAC addr, save in file, backup in bakfile
|
|
+ * if bakfile exist, use it
|
|
+ * if bakfile not exist, generate a new randon addr
|
|
+ */
|
|
+static void generate_mac(char* file, char* bakfile)
|
|
+{
|
|
+ char macaddr[MAC_LEN];
|
|
+ char cmd[128];
|
|
+
|
|
+ ALOGD("%s: file= %s bakfile= %s",__FUNCTION__, file, bakfile);
|
|
+
|
|
+ if (access(file, F_OK) == 0 && access(bakfile, F_OK) == 0) {
|
|
+ ALOGD("both file and bakfile exist, it is ok.");
|
|
+ return;
|
|
+ } else if (access(bakfile, F_OK) == 0) {
|
|
+ ALOGD("only bakfile exist, copy to file.");
|
|
+ sprintf(cmd, "cp %s %s && chmod 644 %s", bakfile, file, file);
|
|
+ ALOGD("cmd=%s", cmd);
|
|
+ system(cmd);
|
|
+ return;
|
|
+ } else if (access(file, F_OK) == 0) {
|
|
+ ALOGD("only file exist, copy to bakfile.");
|
|
+ sprintf(cmd, "cp %s %s && chmod 644 %s", file, bakfile, bakfile);
|
|
+ ALOGD("cmd=%s", cmd);
|
|
+ system(cmd);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ //or, should generate a new mac addr
|
|
+ if(get_randon_mac(macaddr) != 0) {
|
|
+ ALOGD("Generate a randon mac addr failed!!!");
|
|
+ return;
|
|
+ }
|
|
+ //save mac addr to file
|
|
+ sprintf(cmd, "echo %s > %s && chmod 644 %s", macaddr, file, file);
|
|
+ ALOGD("cmd=%s", cmd);
|
|
+ system(cmd);
|
|
+ //backup to bakfile
|
|
+ sprintf(cmd, "cp %s %s && chmod 644 %s", file, bakfile, bakfile);
|
|
+ ALOGD("cmd=%s", cmd);
|
|
+ system(cmd);
|
|
+}
|
|
+
|
|
+int main(int argc, char ** argv)
|
|
+{
|
|
+ char val[256];
|
|
+ char cmd[128];
|
|
+
|
|
+ if (access(STATIC_BTA_PATH, F_OK) != 0 && access(STATIC_MAC_PATH, F_OK) != 0) {
|
|
+ sprintf(cmd, "mkdir -p /mnt/private/ULI/factory");
|
|
+ ALOGD("cmd=%s", cmd);
|
|
+ system(cmd);
|
|
+ }
|
|
+
|
|
+
|
|
+ if(property_get(PROPERTY_BT_BDADDR_PATH, val, NULL)) {
|
|
+ generate_mac(val, STATIC_BTA_PATH);
|
|
+ } else {
|
|
+ generate_mac(BTA_PATH, STATIC_BTA_PATH);
|
|
+ }
|
|
+
|
|
+ generate_mac(MAC_PATH, STATIC_MAC_PATH);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/tulip-common.mk b/tulip-common.mk
|
|
index 748f204..cdf3a3b 100755
|
|
--- a/tulip-common.mk
|
|
+++ b/tulip-common.mk
|
|
@@ -11,7 +11,11 @@ PRODUCT_PACKAGES += \
|
|
camera.tulip
|
|
|
|
PRODUCT_PACKAGES += \
|
|
- libion
|
|
+ libion \
|
|
+ setmacaddr
|
|
+# add for bluetooth addr
|
|
+PRODUCT_PROPERTY_OVERRIDES += \
|
|
+ ro.bt.bdaddr_path=/data/btaddr.txt
|
|
|
|
# audio
|
|
PRODUCT_PACKAGES += \
|
|
--
|
|
1.9.1
|
|
|