Added bluetooth reverse tether start/stop cmd
diff --git a/TetherController.cpp b/TetherController.cpp
index 8d14a14..7a470c7 100644
--- a/TetherController.cpp
+++ b/TetherController.cpp
@@ -38,6 +38,7 @@
     mDnsForwarders = new NetAddressCollection();
     mDaemonFd = -1;
     mDaemonPid = 0;
+    mDhcpcdPid = 0;
 }
 
 TetherController::~TetherController() {
@@ -186,7 +187,69 @@
     ALOGD("Tethering services stopped");
     return 0;
 }
+int TetherController::startReverseTethering(const char* iface) {
+    if (mDhcpcdPid != 0) {
+        LOGE("Reverse tethering already started");
+        errno = EBUSY;
+        return -1;
+    }
 
+    LOGD("TetherController::startReverseTethering, Starting reverse tethering");
+
+    /*
+     * TODO: Create a monitoring thread to handle and restart
+     * the daemon if it exits prematurely
+     */
+    //cleanup the dhcp result
+    char dhcp_result_name[64];
+    snprintf(dhcp_result_name, sizeof(dhcp_result_name) - 1, "dhcp.%s.result", iface);
+    property_set(dhcp_result_name, "");
+
+    pid_t pid;
+    if ((pid = fork()) < 0) {
+        LOGE("fork failed (%s)", strerror(errno));
+        return -1;
+    }
+
+    if (!pid) {
+
+        char *args[10];
+        int argc = 0;
+        args[argc++] = "/system/bin/dhcpcd";
+        char host_name[128];
+        if (property_get("net.hostname", host_name, NULL) && (host_name[0] != '\0'))
+        {
+            args[argc++] = "-h";
+            args[argc++] = host_name;
+        }
+        args[argc++] = (char*)iface;
+        args[argc] = NULL;
+        if (execv(args[0], args)) {
+            LOGE("startReverseTethering, execv failed (%s)", strerror(errno));
+        }
+        LOGE("startReverseTethering, Should never get here!");
+        return 0;
+    } else {
+        mDhcpcdPid = pid;
+        LOGD("Reverse Tethering running, pid:%d", pid);
+    }
+    return 0;
+}
+int TetherController::stopReverseTethering() {
+
+    if (mDhcpcdPid == 0) {
+        LOGE("Tethering already stopped");
+        return 0;
+    }
+
+    LOGD("Stopping tethering services");
+
+    kill(mDhcpcdPid, SIGTERM);
+    waitpid(mDhcpcdPid, NULL, 0);
+    mDhcpcdPid = 0;
+    LOGD("Tethering services stopped");
+    return 0;
+}
 bool TetherController::isTetheringStarted() {
     return (mDaemonPid == 0 ? false : true);
 }